区间dp 与 四边形不等式优化 学习笔记

博客目录

很久之前在网上看了传说中的四边形不等式,然后现在发现忘光了。趁比赛前夕赶快拿来熟悉一下。

一、引入

例题:Division HDU - 3480 区间dp 与 四边形不等式优化 或者 斜率优化

形如:

dp[i][j]=min{dp[i][k]+dp[k+1][j]+cost[i][j]}

的状态转移方程,如果不加优化的话ijk三层循环O(n^3)的复杂度是难以接受的。考虑四边形不等式优化。其中k相当于决策,下面用sp[i][j]来表示k最优的决策。

1.四边形不等式

对于( a < b <= c< d )若有

f[a][c]+f[b][d]<=f[b][c]+f[a][d]

则说这个东西满足四边形不等式,当然这个东西可能是dp数组,也可以是其他数组,比如引入里提到的cost数组,表示的是i到j的花费(比如合并石子问题)

2.重要定理(判断此方程是否可以四边形优化)

设s[i][j]是dp[i][j]取到最优解的k值,即s[i][j]是最优决策。

若上述花费数组cost满足四边形不等式,则dp方程也满足四边形不等式。

若dp方程满足四边形不等式,则决策s单调,即s[i][j-1]<=s[i][j]<=s[i+1][j] 

进而有:(对于上述dp方程来讲,下同)

若cost满足四边形不等式,则决策s也满足四边形不等式,即

设(i < i+1 <= j<j+1),有:

s[i][j-1]<=s[i][j]<=s[i+1][j] 

3.已有结论,如何优化?

对于dp方程:

dp[i][j]=min{dp[i][k]+dp[k+1][j]+cost[i][j]}

若已知s[i][j-1]<=s[i][j]<=s[i+1][j](要记住s数组是k的最优决策),则:

  • 对于j来说,s[i][j]无后效性
  • 对于i来说,s[i][j]无前效性

故倒序循环i,正序循环j(当然对于特定的问题i和j也有范围限制来减小时间常数)

然后根据每一个i,j,都已知dp[i][j-1]的最优决策k=s[i][j-1]、和dp[i+1][j]的最优决策k=s[i][j+1],又因为当前状态dp[i][j]的最优决策k=s[i][j]满足s[i][j-1]<=s[i][j]<=s[i+1][j],所以k只需要在s[i][j-1]到s[i+1][j]之间枚举即可。而这个区间在整个三重循环内是一直向内缩小的,所以整个三层循环的k相当于只遍历了一遍区间,故三层循环退化成二层循环的复杂度。

二、证明

占坑,等南京比完赛再补

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值