procedure2012
It's not worth it to know you're not worth it!

用斜率优化的动态规划需要满足:

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]

posted on 2012-04-17 11:58  procedure2012  阅读(814)  评论(0编辑  收藏  举报