【dp决策单调性&四边形不等式优化】
首先声明两个误区:
- 代价函数满足四边形不等式是dp具有决策单调性的充分不必要条件,所以通过打表,发现dp具有决策单调性不能说明代价函数满足四边形不等式
- 仅有dp的的决策点单调这一个条件是无法用二分+单调队列优化的,因为二分+单调队列优化需要满足一个条件:在新求出一个fi时,考虑i可以作为那些位置的最优决策,需要找到一个位置满足在该位置之前,p数组目前存储的决策都比i优,在这位置之后,p数组存储的决策都比i差,即满足可二分性,但是仅有决策单调这一个条件是不一定满足可二分性的。
实际上四边形不等式是个比决策单调性更强的条件,他能保证在任意一个时刻存储最优决策点的p数组都是单调的,或者说,对于任意一个决策集合,最优决策数组p都是单调的(换句话说,对于任意一个决策p,如果在x处p优于[1,p-1]的所有决策,那么在任意大于x处,决策p都优于[1,p-1]的所有决策)而决策单调性只能保证在最后时刻p数组是单调的。 - 分治做法并非严格弱于二分+单调队列,在代价函数不易计算快速计算,但是可以较快的维护出区间左右端点拓展一个的值时,用分治做法会更优P5574 [CmdOI2019]任务分配问题
以下默认为求min
四边形不等式
定义:对于二元函数\(w(x,y)\),如果\(\forall a\leq b\leq c\leq d\),都有\(w(a,d)+w(b,c)\geq w(a,c)+w(b,d)\),那么称\(w(x,y)\)满足四边形不等式
记忆方法:交叉优于包含
等价定义:\(\forall a<b\),都有\(w(a,b+1)+w(a+1,b)\geq w(a,b)+w(a+1,b+1)\),注意到这个定义将范围缩小到1,一般更容易证明
决策单调性
对于\(f_i=min_{0\leq j<i}\{g_j+w(j,i)\}\),记\(p_i\)为令\(f_i\)取到最小值的\(j\)的值,即\(p_i\)是\(i\)的最优决策点。若\(p\)单调不降,则称\(f\)具有决策单调性
定理:
若\(w(x,y)\)满足四边形不等式,那么\(f\)具有决策单调性,用反证法不难证明,而且实际上可以推出上面提到过的“对于任意一个决策集合,最优决策数组p都是单调的”
优化方法:
- 若\(f\neq g\),可以使用分治算法:
设当前区间为\([l,r]\),决策区间为\([L,R]\),先\(O(R-L+1)\)计算出区间中点的决策点,然后分治为子区间,总复杂度\(O(N\log N)\)
注意,有些二维dp,是按层转移的,层与层之间可以看做这里的f和g的关系,于是可以把复杂度中一个\(N\)换成\(\log\)
还有一点,这个分治算法是不需要满足具备四边形不等式的,因此如果它决策点单调,即可使用该算法解决
当代价函数不好快速计算,但是可以用类似莫队的方法进行维护时,用分治算法,左右端点移动的总距离为\(O(N\log N)\) - 二分+单调队列:
单调队列维护决策数组\(p[i\cdots n]\),队列中每个元素存储三元组\((j,l,r)\)表示“\(l\cdots r\)的最优决策为\(j\)”。
队头维护i的最优决策,当加入决策i时,如果队尾存的区间左端点处,i比原先的决策优,就把队尾弹出,否则在队尾的区间上二分找到第一个i比原先决策优的位置,进行更改。
复杂度也为\((N\log N)\),注意这里允许\(f=g\),即同层转移,但是需要满足四边形不等式。
例题
提交记录
该题的四边形不等式可以写成\(2\sqrt{a}\leq \sqrt{a-1}+\sqrt{a+1}\),两边平方后容易发现其正确性。
本题还可以用上面的分治算法解决。
二维区间DP的四边形不等式优化
定理1:
对于\(f_{i,j}=min_{i\leq k<j}\{f_{i,k}+f_{k+1,j}\}+w(i,j)\)(特别地,\(f_{i,i}=w(i,i)=0\)),若:
- \(w(x,y)\)满足区间包含单调性
- \(w(x,y)\)满足四边形不等式
那么\(f_{i,j}\)也满足四边形不等式。
注意,这里比1D动态规划多了个条件:区间包含单调性,即\(\forall a\leq b\leq c\leq d\),有\(w(a,d)\geq w(b,c)\)。通俗地讲就是“被包含优于包含”
定理2:
记\(P_{i,j}\)为\(f_{i,j}=min_{i\leq k<j}\{f_{i,k}+f_{k+1,j}\}+w(i,j)\)(特别地,\(f_{i,i}=w(i,i)=0\))中令\(f_{i,j}\)取到最优值的k值,即最优决策点
如果\(f\)满足四边形不等式,那么对于任意\(i<j\)都有\(P_{i,j-1}\leq P_{i,j}\leq P_{i+1,j}\),如果把P数组写成矩阵的形式,会发现这个性质实际上说明P矩阵每行每列都是单调不降的,区间DP都是按P矩阵的对角线进行转移的,可以发现一个对角线最多枚举\(O(N)\)个,因此总复杂度\(O(N^2)\)

浙公网安备 33010602011771号