斜率优化,一个挺陌生的词汇,在 OI 中应用不是特别广泛,作为 dp 难题的形式出现在压轴位置上。
基本思路是通过对线性递推式的变化使之符合一个直线,并将最小/大化问题转化为截距最小问题(不着急,以后提及)。
如例题 「HNOI2008」玩具装箱。
在这道例题中,根据题面可以得到递推式:
这个式子是
为了优化降低复杂度,尝试拆开这个式子(设
提取出与
也就是说,现在要最小化的仅为右边的这部分(
令左边为
全部带入原式,变成了:
也就是说,变成了最小化函数
首先,斜率仅关于
想要找到最小值,那么直观的说,就是要找到在最下面的直线。
一系列
如果选择的点不在下凸包上必定不是最优解。
鄙人很菜,不会证明,只会臆测。理论上来说应该是正确的。
减少了很多点,现在只需要判断凸包上哪个点时最合适的。
由于是下凸包,斜率
由于斜率
用单调队列维护相邻两个点的斜率