Bootstrap

四边形不等式

四边形不等式

优化一种动态规划递推式:

  1. f i = m i n 0 ≤ j < i { f j + w ( j + 1 , i ) } f_i=min_{0\le j\lt i}\{f_j+w(j+1,i)\} fi=min0j<i{fj+w(j+1,i)} 典型题目:序列划分
  2. f i , j = m i n i ≤ k < j { f i , k + f k + 1 , j + w ( i , j ) } f_{i,j}=min_{i\le k \lt j}\{f_{i,k}+f_{k+1,j}+w(i,j)\} fi,j=minik<j{fi,k+fk+1,j+w(i,j)} 典型题目:石子合并

必须满足的条件:

a. w ( i , j ) w(i,j) w(i,j)满足区间包含单调性
b. w ( i , i ) = 0 w(i,i)=0 w(i,i)=0
c. w ( i , j ) w(i,j) w(i,j)满足四边形不等式,即对于 x ≤ x ′ < y ≤ y ′ x \le x' \lt y \le y' xx<yy,有 w ( x , y ) + w ( x ′ , y ′ ) ≤ w ( x , y ′ ) , + w ( x ′ , y ) w(x,y) + w(x',y') \le w(x,y'),+w(x',y) w(x,y)+w(x,y)w(x,y),+w(x,y)

决策单调性证明

1维递推式决策单调性证明

对于式子 1 1 1,假设 k k k f i f_i fi的最优决策点,假设 i ′ > i , k ′ < k i'>i,k'<k i>i,k<k,那么对于 f i ′ f_{i'} fi来说,在 k k k点决策优于在 k ′ k' k点决策。

  1. 首先有1式: f i = f k + w ( k + 1 , i ) < f k ′ + w ( k ′ + 1 , i ) f_i=f_k+w(k+1,i) < f_{k'}+w(k'+1,i) fi=fk+w(k+1,i)<fk+w(k+1,i)
  2. 取点 k ′ + 1 < k + 1 < i < i ′ k'+1 \lt k+1 \lt i \lt i' k+1<k+1<i<i,根据四边形不等式得2式: w ( k ′ + 1 , i ) + w ( k + 1 , i ′ ) < w ( k ′ + 1 , i ′ ) + w ( k + 1 , i ) w(k'+1,i)+w(k+1,i') \lt w(k'+1,i') + w(k+1,i) w(k+1,i)+w(k+1,i)<w(k+1,i)+w(k+1,i)
  3. 1式 + 2式可得3式: f k + w ( k + 1 , i ′ ) < f k ′ + w ( k ′ + 1 , i ′ ) f_k+w(k+1,i') \lt f_{k'} + w(k'+1,i') fk+w(k+1,i)<fk+w(k+1,i)
    根据3式,显然决策单调性满足。
2维递推式决策单调性证明

对于式子 2 2 2,假设 p ( i , j ) p(i,j) p(i,j) f i , j f_{i,j} fi,j的最优决策点,那么证明决策单调性即等价于证明 p ( i , j − 1 ) ≤ p ( i , j ) ≤ p ( i + 1 , j ) p(i,j-1) \le p(i,j) \le p(i+1,j) p(i,j1)p(i,j)p(i+1,j)
先证明 p ( i , j − 1 ) ≤ p ( i , j ) p(i,j-1) \le p(i,j) p(i,j1)p(i,j),右边同理。
证明方法:设是 p ( i , j − 1 ) = k , k ′ < k p(i,j-1)=k,k' \lt k p(i,j1)=k,k<k

  1. k k k的最优性,得到1式 f i , j − 1 = f i , k + f k + 1 , j − 1 + w ( i , j − 1 ) < f i , k ′ + f k ′ + 1 , j − 1 + w ( i , j − 1 ) f_{i,j-1}=f_{i,k} + f_{k+1,j-1}+w(i,j-1) \lt f_{i,k'} + f_{k'+1,j-1}+w(i,j-1) fi,j1=fi,k+fk+1,j1+w(i,j1)<fi,k+fk+1,j1+w(i,j1)
  2. 由于 w w w满足四边形不等式,其实 f f f也满足四边形不等式,取 k ′ + 1 < k + 1 < j − 1 < j k'+1 \lt k+1 \lt j-1 \lt j k+1<k+1<j1<j,由递变形不等式可得: f k ′ + 1 , j − 1 + f k + 1 , j < f k ′ + 1 , j + f k + 1 , j − 1 f_{k'+1,j-1}+f_{k+1,j} \lt f_{k'+1,j}+f_{k+1,j-1} fk+1,j1+fk+1,j<fk+1,j+fk+1,j1
  3. 1式+2式可得: f i , k + f k + 1 , j + w ( i , j ) < f i , k ′ + f k ′ + 1 , j + w ( i , j ) f_{i,k}+f_{k+1,j}+w(i,j) \lt f_{i,k'}+f_{k'+1,j}+w(i,j) fi,k+fk+1,j+w(i,j)<fi,k+fk+1,j+w(i,j)
    显然,对于 f i , j f_{i,j} fi,j来说,决策点 k k k要比 k ′ 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 V V个村庄的横坐标,从中选出 P P P个安放邮局,使得所有村庄去邮局距离之和最小。

解:

当只安放一个邮局时候,显然只需选在中间点即可。
w ( i , j ) w(i,j) w(i,j)表示把 [ i , j ] [i,j] [i,j]区间内的村庄安置一个邮局,其最小距离和。
容易发现, w ( i , j ) w(i,j) w(i,j)可以用动态规划来求解,时间复杂度 O ( n 2 ) O(n^2) O(n2) w ( i , j ) = w ( i , j − 1 ) + ( x [ j + 1 ] − x [ y + 1 + x 2 ] ) w(i,j)=w(i,j-1)+(x[j+1]-x[\frac{y+1+x}{2}]) w(i,j)=w(i,j1)+(x[j+1]x[2y+1+x]),发现 w ( i , j ) w(i,j) w(i,j)满足四边形不等式等3个条件。

f i , j f_{i,j} fi,j表示在前 i i i个村庄安放 j j j个邮局,距离之和的最小值。
类似于序列化分问题,我们可以找到转移方程:
f i , j = m i n ( f k , j − 1 + w ( k + 1 , i ) ) f_{i,j}=min(f_{k,j-1}+w(k+1,i)) fi,j=min(fk,j1+w(k+1,i)),根据1维线性递推式的决策单调性证明方法,可以知道这个式子也可以使用四边形进行优化。

;