斜率优化
大多数时候是动态转移方程牵扯到 二元二次 的一类满足决策单调性。
-
Part I : 单调
-
HNOI 2008 - Toy :
我们将仅仅有关一元的项提出 :
考虑到令决策 \((j_1, j_2) (j_1 < j_2)\) 中前者更优秀 :
考虑到 \(g_i\) 单调上升, 那么我们由于决策单调性, 可以考虑 :
维护一个队列(元素从小到大)使得队头 \(k(j_1, j_2) > 2g_i\) 即可,这样保证, 当一个新的决策变得更优秀, 我们可以及时将其弹出, 且所有的 \(k\) 递增。
while (s < t && Slope(Q[s], Q[s + 1]) <= 2 * f[i]) s ++;
dp[i] = dp[Q[s]] + Sqre(f[i] - f[Q[s]] - L - 1);
while (s < t && Slope(Q[t], i) <= Slope(Q[t - 1], Q[t])) t --; Q[++ t] = i;
- APIO2005 特别行动队
- P2900 : 删掉无用决策
暂时就这样。
- Conclusion :

- Part 没有单调性 :
如果后者没有单调性, 那么我们可以考虑二分答案, 维护一个有序的队列。
那前者后者不单调咋办?
比较繁琐, 我丢个图片罢。

-
习题 :
-
P4072
这个强制选 m 段就非常入味, 考虑 wqs 二分。
注意到,这里 \(f(m)\) 还嵌套了一层函数 \(g(m)\) 即 \(m\) 下的最优解,。
考虑到 \(f(m) + km\) 会使得 \(f^{'}(m)\) 的零点偏移,即 \(\delta =k\),考虑到 \(m\) 的增长会带来 \(g(m)\) 的增长。
所以 \(\delta <0\).
考虑 \((j, k)\) 这一决策, 令前者优于后者。

浙公网安备 33010602011771号