四边形不等式
先放几个结论:
(1)一个矩阵A对于任意a<b<=c<d都有 A [ a ] [ c ] + A [ b ] [ d ] < = A [ a ] [ d ] + A [ b ] [ c ] ) A[a][c]+A[b][d]<=A[a][d]+A[b][c]) A[a][c]+A[b][d]<=A[a][d]+A[b][c])称其满足四边形不等式。
(2)等价于对于任意a<b, A [ a ] [ b ] + A [ a + 1 ] [ b + 1 ] < = A [ a ] [ b + 1 ] + A [ a + 1 ] [ b ] A[a][b]+A[a+1][b+1]<=A[a][b+1]+A[a+1][b] A[a][b]+A[a+1][b+1]<=A[a][b+1]+A[a+1][b]
(3)如果转移的代价矩阵满足四边形不等式和区间包含单调性,dp矩阵也满足四边形不等式和区间包含单调性。
(4)如果dp矩阵满足四边形不等式,则具有决策单调性。
部分证明:
(2)四边形不等式转化到图上大概长这样,(1)是A+B<=C+D,(2)的式子即每一个1*1的小方格满足这样的对角线规则,(1)转换到(2)显然,(2)转换到(1)的话,把A到D这一排的方格的式子加起来,再往上走把每一排的式子加起来,最后得到的就是A+B<=C+D了。
(4)对于 f [ i ] = m i n ( f [ j ] + w [ i ] [ j ] ) f[i]=min(f[j]+w[i][j]) f[i]=min(f[j]+w[i][j])型,反证
如果存在a<b<c<d使 f [ a ] + w [ a ] [ c ] ≥ f [ b ] + w [ b ] [ c ] f[a]+w[a][c] \geq f[b]+w[b][c] f[a]+w[a][c]≥f[b]+w[b][c]且 f [ a ] + w [ a ] [ d ] < f [ b ] + w [ b ] [ d ] f[a]+w[a][d]<f[b]+w[b][d] f[a]+w[a][d]<f[b]+w[b][d]
即 f [ a ] + w [ a ] [ c ] + f [ b ] + w [ b ] [ d ] > f [ b ] + w [ b ] [ c ] + f [ a ] + w [ a ] [ d ] f[a]+w[a][c]+f[b]+w[b][d]>f[b]+w[b][c]+f[a]+w[a][d] f[a]+w[a][c]+f[b]+w[b][d]>f[b]+w[b][c]+f[a]+w[a][d]
即 w [ a ] [ c ] + w [ b ] [ d ] > w [ b ] [ c ] + w [ a ] [ d ] w[a][c]+w[b][d]>w[b][c]+w[a][d] w[a][c]+w[b][d]>w[b][c]+w[a][d]与四边形不等式矛盾,得证
对于dp函数是二维的情况,设转移到 f [ i ] [ j ] f[i][j] f[i][j]的点为 s [ i ] [ j ] s[i][j] s[i][j],如 f [ i ] [ j ] f[i][j] f[i][j]满足四边形不等式,同理反证可得
s [ i ] [ j − 1 ] < = s [ i ] [ j ] < s [ i + 1 ] [ j ] s[i][j-1]<=s[i][j]<s[i+1][j] s[i][j−1]<=s[i][j]<s[i+1][j]
题目:
上述证明只是便于理解算法,实际做题时只需证明代价函数具有四边形不等式,若不好证,用结论(2)n^2打表或是暴力dp打表看是否满足决策单调性即可。
(1)对于二维的情况,在转移顺序允许的情况下,可以用 s [ i ] [ j − 1 ] < = s [ i ] [ j ] < s [ i + 1 ] [ j ] s[i][j-1]<=s[i][j]<s[i+1][j] s[i][j−1]<=s[i][j]<s[i+1][j]将其优化到 n 2 n^2 n2
证明:复杂度为 ∑ s [ i + 1 ] [ j ] − s [ i ] [ j ] \sum s[i+1][j]-s[i][j] ∑s[i+1][j]−s[i][j],把每条对角线加起来,相当于该对角线的上端点减下端点。共n条对
角线,总复杂度是小于等于n^2的
(2)一维的情况有单调队列和分治两种做法
1.单调队列,适用于转移用的dp值需要边走边算,且能快速计算 w [ i ] [ j ] w[i][j] w[i][j]的题目(诗人小G),如单调队列里维
护每个决策点为最优的区间即可。
2.分治,适用于该阶段转移用的dp值已经全部算好了,但是 w [ i ] [ j ] w[i][j] w[i][j]不能快速计算的题目(小Q的书架),先计
算目前区间中点的最优决策点k,递归左右,左边的最优决策点在k左边,右边在k右边。计算w的时
候用类似莫队的方式移动区间端点。这样复杂度是k*logn的,当k很大时就需要再加上带权二分了。