四邊形不等式
優化一種動態規劃遞推式:
- fi=min0≤j<i{fj+w(j+1,i)} 典型題目:序列劃分
- fi,j=mini≤k<j{fi,k+fk+1,j+w(i,j)} 典型題目:石子合併
必須滿足的條件:
a. w(i,j)滿足區間包含單調性
b. w(i,i)=0
c. w(i,j)滿足四邊形不等式,即對於x≤x′<y≤y′,有w(x,y)+w(x′,y′)≤w(x,y′),+w(x′,y)
決策單調性證明
1維遞推式決策單調性證明
對於式子1,假設k是fi的最優決策點,假設i′>i,k′<k,那麼對於fi′來說,在k點決策優於在k′點決策。
- 首先有1式:fi=fk+w(k+1,i)<fk′+w(k′+1,i)
- 取點k′+1<k+1<i<i′,根據四邊形不等式得2式:w(k′+1,i)+w(k+1,i′)<w(k′+1,i′)+w(k+1,i)
- 1式 + 2式可得3式:fk+w(k+1,i′)<fk′+w(k′+1,i′)
根據3式,顯然決策單調性滿足。
2維遞推式決策單調性證明
對於式子2,假設p(i,j)是fi,j的最優決策點,那麼證明決策單調性即等價於證明p(i,j−1)≤p(i,j)≤p(i+1,j)。
先證明p(i,j−1)≤p(i,j),右邊同理。
證明方法:設是p(i,j−1)=k,k′<k
- 由k的最優性,得到1式fi,j−1=fi,k+fk+1,j−1+w(i,j−1)<fi,k′+fk′+1,j−1+w(i,j−1)
- 由於w滿足四邊形不等式,其實f也滿足四邊形不等式,取k′+1<k+1<j−1<j,由遞變形不等式可得:fk′+1,j−1+fk+1,j<fk′+1,j+fk+1,j−1。
- 1式+2式可得:fi,k+fk+1,j+w(i,j)<fi,k′+fk′+1,j+w(i,j)。
顯然,對於fi,j來說,決策點k要比k′好,證明完畢。
於是石子合併的代碼可以寫成:
for(int i = 1;i <= n;++i) {
dp[i][i] = 0;
dp[i][i+1] = a[i] + a[i+1];
p[i][i+1] = i;
}
for(int len = 3;len <= n;++len)
for(int i = 1;i <= n;++i) {
int j = i + len - 1;
if(j > n) break;
for(int k = p[i][j-1],k <= p[i+1][j];++k) {
int X = dp[i][k] + dp[k+1][j];
if(X < dp[i][j]){
dp[i][j] = X;
p[i][j] = k;
}
}
}
}
例題
http://poj.org/problem?id=1160
題目大意
給出V個村莊的橫座標,從中選出P個安放郵局,使得所有村莊去郵局距離之和最小。
解:
當只安放一個郵局時候,顯然只需選在中間點即可。
設w(i,j)表示把[i,j]區間內的村莊安置一個郵局,其最小距離和。
容易發現,w(i,j)可以用動態規劃來求解,時間複雜度O(n2),w(i,j)=w(i,j−1)+(x[j+1]−x[2y+1+x]),發現w(i,j)滿足四邊形不等式等3個條件。
記fi,j表示在前i個村莊安放j個郵局,距離之和的最小值。
類似於序列化分問題,我們可以找到轉移方程:
fi,j=min(fk,j−1+w(k+1,i)),根據1維線性遞推式的決策單調性證明方法,可以知道這個式子也可以使用四邊形進行優化。