斜率优化dp

\(dp\) 转移方程可以写成诸如 \(dp_i = \min\{j \mid kj\cdot i+bj\}+C\) 的形式时,可以使用斜率优化.

斜率单调,横坐标单调

以斜率递减,横坐标递增,求最小值为例,其他情况手模类推即可.

使用 deque 维护所有直线,push_back 时要求相邻两直线横坐标严格递增,否则当前队尾的直线是无用的(无论 \(x\) 取值如何都不在该直线上产生最小值),弹出即可,相当于维护一个下凸包.

随着 \(x\) 增大,斜率大的直线逐渐被淘汰,因此查询时不断 pop_front 后取队首即可.

时间复杂度 \(\mathcal{O}(n)\).

例题:洛谷P3195

斜率单调,横坐标不单调

push_back 照常,不能 pop,最优点是单峰的,查询时在凸包上二分最优点即可.

时间复杂度 \(\mathcal{O}(n\log n)\).

例题:洛谷P5785

其他情况

需要用动态凸包、李超线段树等数据结构维护.

posted @ 2026-08-11 16:55  kzssCCC  阅读(8)  评论(0)    收藏  举报