DP 优化 学习笔记
0 参考资料
-
算法竞赛进阶指南 —— LYD
-
XMOJ 倾情讲解 —— BYD
1 斜率优化
1.1 斜率优化简介
如果一类最优化问题的 dp 式可以被表示为 \(f_i = \min / \max \{f_j + cosx_i + cosy_j + F_iF_j\}\),则它一般可以被斜率优化直接优化。
这里我们就以最小值为例。
1.2 决策点策略
假设我们要计算 \(f_p\)。
我们考虑计算当决策点 \(i < j\) 时,\(i\) 比 \(j\) 优秀的条件。
\[f_i + cosx_p + cosy_i + F_iF_p < f_j + cosx_p + cosy_j + F_jF_p
\]
将式子进行化简,得:
\[f_i - f_j < cosy_j - cosy_i + (F_j - F_i) \times F_p
\]
继续化简:
\[(cosy_j + f_j) - (cosy_i + f_i) + (F_j - F_i) \times F_p > 0
\]
这时,我们设 \(x_i = cosy_i + f_i\),则:
\[(F_j - F_i) \times F_p > x_i - x_j
\]
把式子整理得好看一点:
\[\operatorname{slope}(i, j) = \frac{x_i - x_j}{F_i - F_j} > F_p
\]
后面的式子是一个斜率的形式,所以我们把他称之为 斜率优化。
1.3 维护决策点
\(x_i\) 和 \(F_i\) 都有序。
于是有两个结论。
结论 1:若当前 \(i\) 比 \(j\) 优,则之后 \(i\) 一定也比 \(j\) 优。
结论 2:相邻决策之间的斜率单调增。
证明较为简单。
可以直接维护单调队列。
\(x_i\) 有序。
结论 1 不存在了,但是还有结论 2!
需要在凸壳上二分。
\(F_i\) 有序。
需要使用平衡树等维护凸壳。
其他情况。
需要 动态凸壳 / 李超线段树。
1.4 斜率优化总结
斜率优化

浙公网安备 33010602011771号