用斜率优化的动态规划需要满足:
1、转移方程应该是这样的形式:f[i]=Max/Min{f[j]+G(j)}其中G是一个j有关系的函数(有可能包含其他未知数)。
2、设Vx=f[x]+G(x),Vy=f[y]+G(y).
如果在可以推出:
求最大值时根据x<y&&Vx>Vy:W(x,y)<U(i) 其中W(x,y)是和x、y有关的函数U(i)是只和i有关的函数且单调递增
求最小值时根据x<y&&Vx<Vy:W(x,y)>U(i) 其中W(x,y)是和x、y有关的函数U(i)是只和i有关的函数且单调递增
快速的转移出这样的方程需要用单调队列来维护(以最大值为例最小值类似):
1、在转移前比较队首h和队首的下一个h+1如果W(h,h+1)>=U(i)说明Vh+1更优就出队直到不符和或只剩一个,它便是最优的决策
2、转移
3、在转移后加入对队列时因为W(h,h+1)>=U(i)所以要维护队列单调递减。
例题:求最大:[APIO2010 特别行动队]
求最小:[HNOI2008 Toy]