四边形不等式

式子

对于 ∀ a ≤ b ≤ c ≤ d \forall a≤b≤c≤d abcd,满足 w ( a , c ) + w ( b , d ) ≤ w ( a , d ) + w ( b , c ) w(a,c)+w(b,d)≤w(a,d)+w(b,c) w(a,c)+w(b,d)w(a,d)+w(b,c)

用途

一般是对DP的优化
说明一点,扩,扩充在这里的意思是:
目前有一个不等式 a ≤ b a≤b ab,已知 b ≤ c b≤c bc,则该不等式改写为 a ≤ c a≤c ac

证明

定理1
f [ i , j ] = m i n ( f [ i , k ] + f [ k + 1 , j ] + w ( i , j ) ) f[i,j]=min(f[i,k]+f[k+1,j]+w(i,j)) f[i,j]=min(f[i,k]+f[k+1,j]+w(i,j))
若w满足区间包含单调性和四边形不等式,
则f也满足区间包含单调性和四边形不等式
注意边界!
f [ i ] [ i ] = 0 , f [ i ] [ j ] = 0 , ( i > j ) f[i][i]=0,f[i][j]=0,(i>j) f[i][i]=0,f[i][j]=0,(i>j)
证明
这里的方法是,不断地凑式子,比如A<=B<=C。B是通过A凑出来的,C是通过B凑出来的。
区间包含单调性
∀ a ≤ b ≤ c ≤ d \forall a≤b≤c≤d abcd,满足 w ( a , d ) ≥ w ( b , c ) w(a,d)≥w(b,c) w(a,d)w(b,c)
f的区间包含单调性?
i ≤ i ′ ≤ k ≤ j ′ ≤ j i≤i&#x27;≤k≤j&#x27;≤j iikjj
f [ i ] [ j ] = m i n f [ i ] [ k ] + f [ k + 1 ] [ j ] + w ( i , j ) f[i][j]=min{f[i][k]+f[k+1][j]}+w(i,j) f[i][j]=minf[i][k]+f[k+1][j]+w(i,j)
f [ i ′ ] [ j ′ ] = m i n f [ i ′ ] [ k ] + f [ k + 1 ] [ j ′ ] + w ( i ′ , j ′ ) f[i&#x27;][j&#x27;]=min{f[i&#x27;][k]+f[k+1][j&#x27;]}+w(i&#x27;,j&#x27;) f[i][j]=minf[i][k]+f[k+1][j]+w(i,j)
通过归纳法,可知 f [ i ] [ k ] ≥ f [ i ′ ] [ k ] , f [ k + 1 ] [ j ] ≥ f [ k + 1 ] [ j ′ ] f[i][k]≥f[i&#x27;][k],f[k+1][j]≥f[k+1][j&#x27;] f[i][k]f[i][k],f[k+1][j]f[k+1][j]
所以, f [ i ] [ j ] ≥ f [ i ′ ] [ j ′ ] f[i][j]≥f[i&#x27;][j&#x27;] f[i][j]f[i][j]
需要用到这个结论来进行后面的讨论。
求证: f [ a ] [ c ] + f [ b ] [ d ] ≤ f [ a ] [ d ] + f [ b ] [ c ] f[a][c]+f[b][d]≤f[a][d]+f[b][c] f[a][c]+f[b][d]f[a][d]+f[b][c]
①当 a = b a=b a=b c = d c=d c=d,显然成立。
仍然使用归纳法。设当前区间 [ a , d ] [a,d] [a,d]内的所有子区间满足四边形不等式。
两种情况
a &lt; b = c &lt; d a&lt;b=c&lt;d a<b=c<d
a &lt; b &lt; c &lt; d a&lt;b&lt;c&lt;d a<b<c<d
对于第一种情况, f [ a ] [ b ] + f [ b ] [ d ] ≤ f [ a ] [ d ] + f [ b ] [ b ] = f [ a ] [ d ] f[a][b]+f[b][d]≤f[a][d]+f[b][b]=f[a][d] f[a][b]+f[b][d]f[a][d]+f[b][b]=f[a][d]。设 k = s [ a ] [ d ] k=s[a][d] k=s[a][d],表示 f [ a ] [ d ] f[a][d] f[a][d]的最优决策点。
有3种情况。
k &lt; b , k = b , k &gt; b k&lt;b,k=b,k&gt;b k<b,k=b,k>b
k &lt; b k&lt;b k<b f [ a ] [ b ] + f [ b ] [ d ] ≤ f[a][b]+f[b][d]≤ f[a][b]+f[b][d]
f [ a ] [ k ] + f [ k + 1 ] [ b ] + w ( a , b ) + f [ b ] [ d ] ≤ f[a][k]+f[k+1][b]+w(a,b)+f[b][d]≤ f[a][k]+f[k+1][b]+w(a,b)+f[b][d] 拆项
f [ a ] [ k ] + f [ k + 1 ] [ d ] + w ( a , d ) ≤ f [ a ] [ d ] f[a][k]+f[k+1][d]+w(a,d)≤f[a][d] f[a][k]+f[k+1][d]+w(a,d)f[a][d] 换字母,扩
k = b k=b k=b,显然。
k &gt; b k&gt;b k>b,情况和①类似。

a &lt; b &lt; c &lt; d a&lt;b&lt;c&lt;d a<b<c<d
显然,函数 y ( k ) = f [ a ] [ k ] + f [ k + 1 ] [ b ] y(k)=f[a][k]+f[k+1][b] y(k)=f[a][k]+f[k+1][b]有个最低点,当 k = s [ a ] [ b ] k=s[a][b] k=s[a][b]时。
所以,将 f [ b ] [ c ] f[b][c] f[b][c]的最优决策点 y y y f [ a ] [ d ] f[a][d] f[a][d]的最优决策点z找出来。
证明方法:有待展开的2个区间, f [ a ] [ c ] f[a][c] f[a][c] f [ b ] [ d ] f[b][d] f[b][d]
仍然将区间 [ a , d ] [a,d] [a,d]分成区间 [ a , b ) , [ b , d ] [a,b),[b,d] [a,b),[b,d]
a &lt; b ≤ y ≤ z a&lt;b≤y≤z a<byz,y拆 f [ a ] [ c ] f[a][c] f[a][c],z拆 f [ b ] [ d ] f[b][d] f[b][d]
a &lt; b ≤ z ≤ y a&lt;b≤z≤y a<bzy,z拆 f [ a ] [ c ] f[a][c] f[a][c],y拆 f [ b ] [ d ] f[b][d] f[b][d]
a &lt; b ≤ z ≤ y a&lt;b≤z≤y a<bzy,z拆 f [ a ] [ c ] f[a][c] f[a][c],y拆 f [ b ] [ d ] f[b][d] f[b][d]
最后都可以证明四边形不等式成立。证明方法,参考第一种情况的证明方法。

证毕。

用途

定理2
f [ i ] [ j ] = m i n f [ i ] [ k ] , f [ k + 1 ] [ j ] + w ( i , j ) f[i][j]=min{f[i][k],f[k+1][j]}+w(i,j) f[i][j]=minf[i][k],f[k+1][j]+w(i,j)
优化前复杂度: O ( n 3 ) O(n^3) O(n3)
优化后复杂度: O ( n 2 ) O(n^2) O(n2)
若f满足四边形不等式,则s也同时满足 s [ i ] [ j − 1 ] ≤ s [ i ] [ j ] ≤ s [ i + 1 ] [ j ] s[i][j-1]≤s[i][j]≤s[i+1][j] s[i][j1]s[i][j]s[i+1][j]

先证明 s [ i ] [ j − 1 ] ≤ s [ i ] [ j ] s[i][j-1]≤s[i][j] s[i][j1]s[i][j]。一般这种证决策单调性,用反证法。
就是说证明 s [ i ] [ j − 1 ] ≤ s [ i ] [ j ] s[i][j-1]≤s[i][j] s[i][j1]s[i][j]是错的。
k 1 = s [ i ] [ j ] , k 2 = s [ i ] [ j − 1 ] k_1=s[i][j],k_2=s[i][j-1] k1=s[i][j],k2=s[i][j1]
通过不等式两边同时补某些加上这些项之后,整个式子待扩充的项,及合并,即可证明。

s [ i ] [ j ] ≤ s [ i + 1 ] [ j ] s[i][j]≤s[i+1][j] s[i][j]s[i+1][j]的证明方法也是如此。

判断

如果 ∀ a ≤ b ≤ c ≤ d \forall a\leq b\leq c\leq d abcd,满足 w ( a , c ) + w ( b , d ) ≤ w ( a , d ) + w ( b , c ) w(a,c)+w(b,d)≤w(a,d)+w(b,c) w(a,c)+w(b,d)w(a,d)+w(b,c)
当且仅当: w ( i , j ) + w ( i + 1 , j + 1 ) ≤ w ( i , j + 1 ) + w ( i + 1 , j ) w(i,j)+w(i+1,j+1)\leq w(i,j+1)+w(i+1,j) w(i,j)+w(i+1,j+1)w(i,j+1)+w(i+1,j)
必要性显然。(有A必有B)
证明充分性。(有B必有A)
证明方法:整体法,换元,如将 i + 1 i+1 i+1看成i。
w ( i , j ) + w ( i + 1 , j + 1 ) ≤ w ( i , j + 1 ) + w ( i + 1 , j ) ⇒ w(i,j)+w(i+1,j+1)≤w(i,j+1)+w(i+1,j)\Rightarrow w(i,j)+w(i+1,j+1)w(i,j+1)+w(i+1,j)
w ( i , j ) − w ( i , j + 1 ) ≤ w ( i + 1 , j ) − w ( i + 1 , j + 1 ) ≤ w ( i + 2 , j ) − w ( i + 2 , j + 1 ) ≤ . . . ≤ w ( i + k , j ) − w ( i + k , j + 1 ) w(i,j)-w(i,j+1)≤w(i+1,j)-w(i+1,j+1)\leq w(i+2,j)-w(i+2,j+1) \leq... \leq w(i+k,j)-w(i+k,j+1) w(i,j)w(i,j+1)w(i+1,j)w(i+1,j+1)w(i+2,j)w(i+2,j+1)...w(i+k,j)w(i+k,j+1)
同理, i &lt; i + k ≤ j ≤ j + l i&lt;i+k≤j≤j+l i<i+kjj+l也用一样的蒸发。

具体应用

环形DP

这篇博客写得好!请点这里
给一道经典例题:

在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。
试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.

先不用四边形不等式优化,先将 O ( n 3 ) O(n^3) O(n3)的DP写出来。
显然设 d p [ l ] [ r ] dp[l][r] dp[l][r]表示 [ l , r ] [l,r] [l,r]区间的答案。 O ( n 3 ) O(n^3) O(n3)转移显然。
如果是不是环,直接求 d p [ 1 ] [ n ] dp[1][n] dp[1][n]即可。

加上环的限制?
显然,将 [ 1 , n ] [1,n] [1,n]复制一遍,然后求 m i n d p [ l ] [ l + l e n − 1 ] min{dp[l][l+len-1]} mindp[l][l+len1]
这道题目是HDU3506 Monkey Party。可以在HDU上提交。

用四边形不等式优化?
f [ i ] [ j ] = m i n f [ i ] [ k ] + f [ k + 1 ] [ j ] + w ( i , j ) f[i][j]=min{f[i][k]+f[k+1][j]+w(i,j)} f[i][j]=minf[i][k]+f[k+1][j]+w(i,j)
w ( i , j ) = Σ k = i j a [ k ] w(i,j)=\Sigma_{k=i}^j a[k] w(i,j)=Σk=ija[k]
显然, w ( i , j ) w(i,j) w(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][j1]s[i][j]s[i+1][j]
区间DP,通常先枚举区间长度,再枚举左端点。
伪代码

for len=1 to n
    for l=1 to n-len+1{
        r=l+len-1;
        for k=s[l][r-1] to s[l+1][r]
            f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]+w(l,r));
    }   

时间复杂度: O ( n 2 ) O(n^2) O(n2)

证明?

对于每个len,复杂度: Σ i = 1 n − l e n + 1 s [ i + 1 ] [ i + l e n − 1 ] − s [ i ] [ i + l e n − 2 ] \Sigma_{i=1}^{n-len+1} s[i+1][i+len-1]-s[i][i+len-2] Σi=1nlen+1s[i+1][i+len1]s[i][i+len2]
消去很多项,最后剩下 s [ n − l e n + 2 ] [ n ] − s [ 1 ] [ l − 1 ] s[n-len+2][n]-s[1][l-1] s[nlen+2][n]s[1][l1],所以复杂度是 O ( n ) O(n) O(n)的。

赛场上

只有那些大佬才能够推出这些东西暴虐我们。
我们该做什么?
打表。
找出 s [ i ] [ j ] s[i][j] s[i][j]
判断 w ( i , j ) w(i,j) w(i,j)是否满足区间包含单调性和四边形不等式。
f ( i , j ) f(i,j) f(i,j)是否满足区间包含单调性和四边形不等式。
这些都可以暴力求。

对于w(i,j)的整体感知

这是个大难点。
通过 w ( i , j ) w(i,j) w(i,j)来设 f [ i ] [ j ] f[i][j] f[i][j]
w ( i , j ) w(i,j) w(i,j)的意义:表示区间 [ i , j ] [i,j] [i,j]的贡献。
怎么样能够快速地求出 w ( i , j ) w(i,j) w(i,j)?这个 w ( i , j w(i,j w(i,j的复杂度不超过主DP的复杂度。一般一个式子搞定。
比如说能够通过 w ( i + 1 , j ) w(i+1,j) w(i+1,j)顺利推出 w ( i , j ) w(i,j) w(i,j) w ( i , j − 1 ) w(i,j-1) w(i,j1)顺利推出 w ( i , j ) w(i,j) w(i,j)

例题

POJ1160 Post Office
有一个数轴n个点,第i个点的坐标为 p i p_i pi
在n个点中选出k个作为关键点。问每个点到离其最近的关键点的距离和的最小值。
d p [ i ] [ j ] dp[i][j] dp[i][j]表示选了i个关键点,1~j号点已经确定了哪个关键点离它们最近。
d p [ i ] [ j ] = m i n { d p [ i ] [ k ] + w ( k + 1 , j ) } dp[i][j]=min\{dp[i][k]+w(k+1,j)\} dp[i][j]=min{dp[i][k]+w(k+1,j)}
这里的 w ( i , j ) w(i,j) w(i,j)代表了i到j号点的花费。并且在i~j中只设立一个关键点!!!
解决了这个问题,那么如何通过 w ( i + 1 , j ) w(i+1,j) w(i+1,j)顺利推出 w ( i , j ) w(i,j) w(i,j) w ( i , j − 1 ) w(i,j-1) w(i,j1)顺利推出 w ( i , j ) w(i,j) w(i,j)?
经过递推发现,
所以, w ( i , j ) = w ( i , j − 1 ) + p [ j ] − p [ i + j 2 ] w(i,j)=w(i,j-1)+p[j]-p[\frac{i+j}{2}] w(i,j)=w(i,j1)+p[j]p[2i+j]
w ( i , j ) = w ( i + 1 , j ) + p [ i + j 2 ] − p [ i ] w(i,j)=w(i+1,j)+p[\frac{i+j}{2}]-p[i] w(i,j)=w(i+1,j)+p[2i+j]p[i]

然后证明 w w w满足四边形不等式。
谁会去证啊?只有大佬们才去。我太弱了。

最后说的

四边形不等式通过决策单调性来优化复杂度的。
那些证明的方法,受到了文化课的启发。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值