首页 > 其他 > 详细

[斜率优化DP]【学习笔记】【更新中】

时间:2017-01-07 10:57:03      阅读:220      评论:0      收藏:0      [点我收藏+]

 

参考资料:

1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf

2.http://www.cnblogs.com/MashiroSky/p/6009685.html

【一】

对于一类转移方程:

f[i]=max{a[i]*b[j]+c[i]+d[j]}

a[i]和c[i]是开始求解前就知道常数,b[j]和d[j]知道f[j]后就知道有关

可以使用斜率优化(不是这个形式就尽量往这个形式化


 

{以下讨论不严格区分优于和不差于}

【决策单调性】:

对于两个转移j和k,设b[j]<b[k]

假设j比k优或相等,把式子一化就变成了(注意bj-bk是负数啊,我对不起小新)

-a[i]>=(d[k]-d[j])/((b[k]-b[j])

这是一个斜率的形式,记slope(j,k)=(d[k]-d[j])/((b[k]-b[j])

那么,-a[i]>=slope(j,k)时j转移比k转移优

对于一个状态就可以判断两个转移谁更优了

 


 

对于三个转移x y z ,bx<by<bz

如果slope(x,y)<=slope(y,z),y一定不是任何一个状态的最优转移

证明:

假设y是p的最优转移,-a[p]<=slope(x,y)<=slope(y,z),所以z比y优


 

然后,这不就是个上凸壳


 

对于f[i]=min{a[i]*b[j]+c[i]+d[j]},只是把不等号反转而已,是一个下凸壳


 

【二】

如何维护这个凸壳?

以min为例

1.b单调,-a单调,凸壳只在右侧插入点且最优转移位置不断右移,单调队列/栈即可

 

[斜率优化DP]【学习笔记】【更新中】

原文:http://www.cnblogs.com/candy99/p/6258792.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!