题解 P3195 [HNOI2008] 玩具装箱 斜率优化例题
题目简述
有 \(n\) 个玩具,第 \(i\) 个玩具价值为 \(c_i\)。
要求将这些玩具排成一排,并分成若干段。
对于一段 \([l,r]\),其代价为:
其中 \(L\) 是一个常量。
求一种分段方案,使得总代价最小。
\(n \in [1,5*10^4]\)
思考
定义\(dp[i]\) 为前\(i\)个玩具分成诺干组的最小值
\(dp_i=\min\limits_{j\in[0,i-1]} (i-j+\sum\limits_{k=j+1}^{i}c_i - L)^2+dp_j\)
我们定义以下量
\(pre_i=\sum\limits_{j=1}^{i} c_i\)
\(t_i=pre_i+1\)
\(L'=L+1\)
可得
\(dp_i=(s_i-L')^2+\min\limits_{j\in[0,i-1]} [t_j^2-2(t_i-L')t_j+dp_j]\)
\(dp_i=(s_i-L')^2+\min\limits_{j\in[0,i-1]} [t_j^2+2(L'-t_i)t_j+dp_j]\)
我们发现,对于每次转移\(2(L'-t_i)\)是固定的。 然后我们可以发现,\(min\)里头的式子很像一次函数,斜率是\(t_j\),常数项是\(dp_j+t_j^2\)。 而且,不管\(i\)为合值。这个一次函数是确定的。
那么对于每次计算\(dp_i=(s_i-L')^2+\min\limits_{j\in[0,i-1]} [t_j^2+2(L'-t_i')t_j+dp_j]\), 求变成了对于\(i-1\)个函数,求这些函数在\(x=2(L'-t_i)\)的最小值。
显然,这可以使用李超线段树解决。但是李超线段树是带 \(log\) 的,我们想不带\(log\)的做法。
注意到由于 \(c_i >0\) 所以斜率 \(t_j\) 递增。
所有我们查询的\(x\)值递增。
同时,我们很容易发现,对应两个不平行的,\(k>0\)的函数。存在一个\(x\)点,使得查询点在在\(x\)之前的时候斜率大的对应的\(y\)更小,
\(x\)之后斜率小的\(x\)更小。

我们的函数的图像总是形如上面那个图。
我们使用线段来描述一个一次函数
我们发现,每次转移所要求的的最低的交点对应的函数在上图中对应
\(DA \rightarrow AB \rightarrow BC \rightarrow CE\) 同时我们发现这关于函数斜率满足单调性。
我们可以使用指针优化。
但是注意特殊情况。存在直线永远不会被选择。
如图:

我们发现,虽然红线的斜率位于绿线好紫线之间。但是它总不会成为最小值对应的线段。
但是注意,这里有一个问题:就是我们这么做依赖这个题目的性质,例如函数的单调性,查询\(x\)的坐标的单调性。这在很多斜率优化题目中是没有的
我们考虑常规/通用做法。
通用做法
我们定义\(X=2(L'-t_i)\)
我们考虑枚举\(C\)。那么答案就是最小的\(C\)使得存在\(C=aX+b\)。,其中\(a=t_j, b=dp_j+t_j^2\)。
我们考虑如何验证是否有满足条件的函数,尝试变形。
我们现在把条件变成了一次函数形式。那么如果把一个函数的\(a,b\)带入满足这个式子。那么这个函数对于\(X\)的值就是\(C\)。
我们尝试将一个函数使用坐标上的点表示,\(y=ax+b\) 使用\((a,b)\)表示。
主要!!!以下所有的点都是指描述函数的点(二次项系数,常数项),而非之间每个j对应的函数上的点。
那么函数带入式子就转化为了对应点是否在函数\(-Xa+C=b\)上,\(-X\)是一次项系数,\(C\)是常数项。
那么我们要求的就是最小的\(C\)使得函数\(-Xa+C=b\)与已有点存在交点。
暴力枚举\(C\)肯定是不行的。
我们考虑怎么算。
我们引入新的定义: 凸包,上凸包,下凸包。
对应一个点集。我们使用一个橡皮筋(环形)勒住这个点集。其中与橡皮筋(环形)之间接触的,就是构成凸包的点。

例如,下图中使用彩色线段连接的点就是凸包。
上凸包,就是拿一根橡皮筋(不是橡皮环)从上往下勒住点,其中与橡皮筋之间接触的,就是构成上凸包的点。即图中红色线段连接的点。
下凸包。与上凸包类似,不过是从下往上勒住。即图中绿色线段连接的点。
在这个题目中,我们要求最小的\(C\),答案函数对应的点必然处于下凸包。
然后我们发现,在凸包中,凸包的边存在单调性。例如下凸包的边的斜率单调增加。
我们很容易发现。最终答案对应的点相连的两条边中,总有一条的斜率是与切线斜率的差的绝对值最小的。
同时边的斜率满足单调性。
所以我们可以使用二分查找。
end.
当然,要是不使用单调队列优化的话,使用切线去切。那么也是带log的,与李超线段树没什么差别了

浙公网安备 33010602011771号