【决策单调性分治优化】对于一类DP状态方程的优化讲解

前言

之前直接拿板子来用,也不知道是什么原理...

这次下定决心把它搞懂(其实是因为期末考试要考orz...)

参考:老师讲课课件

关于一类DP状态方程的优化

对于形如:dp[ i ][ j ] = min( k < j ){ dp[ i - 1 ][ k ] +cost[ k ][ j ] }

其中cost[ k ][ j ]表示从k到j的权值函数值。
若第一维的范围是1~K,第二维的范围是1~N,则朴素方法的时间复杂度为O(KN^2)
如果满足决策单调性,则可以用分治的方法把时间降到O(KNlogN)
该方法简单实用,不需要维护额外的数据结构,好想好写。

虽然此类DP状态方程可以进一步降低复杂度,但在时间紧张的情况,可以作为一种较理想的实现方法。
国外资料上常把此类优化称为“ Divide and Conquer Optimization”

决策单调性分治优化

解决此类问题的前提是证明或者观察出DP状态的决策点具有单调性。
令opt[ i ][ j ]表示最小的k满足dp[ i ][ j ] = dp[ i ][ k ] + cost( k+1...j )
因为有决策单调性,因此决策点有这样的性质:
opt[ i ][ 1 ] <= opt[ i ][ 2 ] <= ... <= opt[ i ][ n ]
这有什么用呢?
设第二维的n=200,我们已经算出了所有i=3的状态值,现在要计算i=4的各个状态。
我们首先暴力计算出二分点mid = 100时的状态值dp[4][100],同时得到了最优决策点opt[4][100]。
根据决策单调性,在后续计算dp[4][1]..dp[4][99]的过程中,最优决策点一定是在1..opt[4][100]中。同理, dp[4][101]..dp[4][200]的最优决策点一定在是opt[4][100]..n中。于是就可以递归分治解决。

个人感觉有点像二分...但是这个方法是建立在【四边形不等式】的基础上的——这意味着我还要好好学四边形不等式及其优化!orz

练习题

1.监狱狱警:https://blog.csdn.net/qq_36294918/article/details/103834106

2.阿拉伯的劳伦斯 Lawrence of Arabia:https://blog.csdn.net/qq_36294918/article/details/103834688

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值