四边形不等式
优化一种动态规划递推式:
- 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=min0≤j<i{fj+w(j+1,i)} 典型题目:序列划分
- 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=mini≤k<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'
x≤x′<y≤y′,有
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式: 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)
- 取点 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)
- 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,j−1)≤p(i,j)≤p(i+1,j)。
先证明
p
(
i
,
j
−
1
)
≤
p
(
i
,
j
)
p(i,j-1) \le p(i,j)
p(i,j−1)≤p(i,j),右边同理。
证明方法:设是
p
(
i
,
j
−
1
)
=
k
,
k
′
<
k
p(i,j-1)=k,k' \lt k
p(i,j−1)=k,k′<k
- 由 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,j−1=fi,k+fk+1,j−1+w(i,j−1)<fi,k′+fk′+1,j−1+w(i,j−1)
- 由于 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<j−1<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,j−1+fk+1,j<fk′+1,j+fk+1,j−1。
- 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,j−1)+(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,j−1+w(k+1,i)),根据1维线性递推式的决策单调性证明方法,可以知道这个式子也可以使用四边形进行优化。