斜率优化dp
当 \(dp\) 转移方程可以写成诸如 \(dp_i = \min\{j \mid kj\cdot i+bj\}+C\) 的形式时,可以使用斜率优化.
斜率单调,横坐标单调
以斜率递减,横坐标递增,求最小值为例,其他情况手模类推即可.
使用 deque 维护所有直线,push_back 时要求相邻两直线横坐标严格递增,否则当前队尾的直线是无用的(无论 \(x\) 取值如何都不在该直线上产生最小值),弹出即可,相当于维护一个下凸包.
随着 \(x\) 增大,斜率大的直线逐渐被淘汰,因此查询时不断 pop_front 后取队首即可.
时间复杂度 \(\mathcal{O}(n)\).
斜率单调,横坐标不单调
push_back 照常,不能 pop,最优点是单峰的,查询时在凸包上二分最优点即可.
时间复杂度 \(\mathcal{O}(n\log n)\).
其他情况
需要用动态凸包、李超线段树等数据结构维护.

浙公网安备 33010602011771号