问题引入
如果你学习过算法这门课程,一定知道动态规划这种算法思想,像背包问题、最长公共子序列LCS、最长上升子序列LIS等经典问题,都可以借助动态规划解决。习惯上,人们常常把动态规划简称为“DP”。如果你做过一定量的算法题,相信你一定体会过被DP支配的恐惧:区间DP、背包DP、树形DP、数位DP、状压DP······当然,还有传说中的插头DP,这种东西我是不敢碰的,所以略去不提。
对于一道比较常规(简单)的DP算法题,我们一般需要定义状态,分析出状态转移方程,设定初值,这样我们就可以愉快地用代码实现它了。难一点的题目,还需要利用数据结构、斜率、四边形不等式等手段去优化它们。我们今天要介绍的四边形不等式,就是这样的一种优化DP的方法。本文旨在对四边形不等式优化DP的原理加以说明,进行公式推导,其他和相关的细节可以参考后面介绍四边形不等式的两个链接:(链接)知乎文章和(链接)OI-Wiki。
我们这里先着重介绍四边形不等式对某些特殊的二维区间DP的优化原理。对于下面这种形式的DP状态转移方程:
一共 n 2 n^2 n2 个状态,每次状态转移需要 O ( n ) \mathrm{O(n)} O(n) 的时间,我们可以在 O ( n 3 ) \mathrm{O(n^3)} O(n3) 的时间内求出所有的 F [ i , j ] F[i,j] F[i,j]。对于 n ⩽ 100 n\leqslant100 n⩽100 的数据规模,这种复杂度已经足够。可是,如果题目告诉你 n ⩽ 1000 n\leqslant1000 n⩽1000 ,你就不得不去琢磨一个 O ( n 2 ) \mathrm{O(n^2)} O(n2) 的算法。
优化思想
这时,我们就需要把目光放到转移方程中不起眼的 w ( i , j ) w(i,j) w(i,j) 上面了。我们把 w ( i , j ) w(i,j) w(i,j) 看成定义在整数集上的二元函数,如果 w ( i , j ) w(i,j) w(i,j) 满足以下两个条件:
1. (区间包含单调性)对于任意的
a
⩽
b
⩽
c
⩽
d
a\leqslant b\leqslant c\leqslant d
a⩽b⩽c⩽d,满足
w
(
a
,
d
)
⩾
w
(
b
,
c
)
w(a,d)\geqslant w(b,c)
w(a,d)⩾w(b,c);
2. (四边形不等式)对于任意的
a
⩽
b
⩽
c
⩽
d
a\leqslant b\leqslant c\leqslant d
a⩽b⩽c⩽d,有
那么就可以证明,使状态转移方程中
F
[
i
,
k
]
+
F
[
k
+
1
,
j
]
F[i,k]+F[k+1,j]
F[i,k]+F[k+1,j] 取最小值的
k
k
k 具备某种单调性,于是就可以缩小转态转移时
k
k
k 的搜索范围。这样一来,最终就可以把计算
F
[
i
,
j
]
F[i,j]
F[i,j] 的
n
2
n^2
n2 个状态的时间复杂度优化至
O
(
n
2
)
\mathrm{O(n^2)}
O(n2)。
上面是对四边形不等式优化DP的原理的粗略说明,下面将对此加以展开,并进行必要的数学推导。数学推导是理解四边形不等式关键,也是它的难点所在(以及恶心的地方)。
在进行正式的展开之前,我们先理解一下前面提到的
w
(
i
,
j
)
w(i,j)
w(i,j) 需要满足的两个条件,条件 1 被称作区间包含单调性,由于
a
⩽
b
⩽
c
⩽
d
a\leqslant b\leqslant c\leqslant d
a⩽b⩽c⩽d,所以区间
[
b
,
c
]
[b,c]
[b,c] 包含于区间
[
a
,
d
]
[a,d]
[a,d],
w
(
b
,
c
)
w(b,c)
w(b,c) 与
w
(
a
,
d
)
w(a,d)
w(a,d) 的大小关系与区间包含关系的方向是一致的,我们可以简单的理解为部分不大于整体。条件 2 中的四边形不等式初看没有头绪,前面链接的知乎文章把它与几何四边形中的不等式做了类比,OI-Wiki把它总结为“交叉小于包含”,我觉得这两种解释无助于理解它的本质,对它做下面几种变形:
w
(
a
,
d
)
−
w
(
a
,
c
)
⩾
w
(
b
,
d
)
−
w
(
b
,
c
)
w(a,d)-w(a,c)\geqslant w(b,d)-w(b,c)
w(a,d)−w(a,c)⩾w(b,d)−w(b,c)
w
(
a
,
d
)
−
w
(
b
,
d
)
≥
w
(
a
,
c
)
−
w
(
b
,
c
)
w(a,d)-w(b,d)\geq w(a,c)-w(b,c)
w(a,d)−w(b,d)≥w(a,c)−w(b,c)这样变形之后是不是可以找到一点感觉了?对第一个式子,把二元函数
w
w
w 中的第二个变元看成常量,令
H
1
(
x
)
=
w
(
x
,
d
)
−
w
(
x
,
c
)
H_{1}(x) = w(x, d) - w(x,c)
H1(x)=w(x,d)−w(x,c),对任意
a
⩽
b
a\leqslant b
a⩽b,有
H
1
(
a
)
⩾
H
1
(
b
)
H_{1}(a)\geqslant H_{1}(b)
H1(a)⩾H1(b),可以看出
H
1
(
x
)
H_{1}(x)
H1(x) 单调递减;类似地,对第二个式子,令
H
2
(
x
)
=
w
(
a
,
x
)
−
w
(
b
,
x
)
H_{2}(x)=w(a,x)-w(b,x)
H2(x)=w(a,x)−w(b,x),对任意
c
⩽
d
c\leqslant d
c⩽d,有
H
2
(
c
)
⩽
H
2
(
d
)
H_{2}(c)\leqslant H_{2}(d)
H2(c)⩽H2(d),显然
H
2
(
x
)
H_2(x)
H2(x) 单调递增。也就是说,四边形不等式中隐含着 在两个维度的单调性。而这个单调性正是优化状态转移的关键所在,后面相关定理的推导也将经常用到四边形不等式上面的两个变形。
三个结论及其概述
下面,我们先给出三个结论,作为四边形不等式优化本文提出的 D P \mathrm{DP} DP 状态转移方程的理论根据。理清了给出的三个结论的先后递进关系后,再展开它们的证明过程。
结论 1 1\quad 1(四边形不等式的等价表示) w ( x , y ) w(x,y) w(x,y) 是定义在整数集合上的二元函数,则 w ( x , y ) w(x,y) w(x,y) 满足四边形不等式的充分必要条件是对于定义域内任意整数 a , b ( a < b ) a,b(a<b) a,b(a<b),都有
w ( a , b + 1 ) + w ( a + 1 , b ) ⩾ w ( a , b ) + w ( a + 1 , b + 1 ) w(a,b+1)+w(a+1,b)\geqslant w(a,b)+w(a+1,b+1) w(a,b+1)+w(a+1,b)⩾w(a,b)+w(a+1,b+1).
结论 1 1 1 给出了四边形不等式的一种等价表示,在推导后面两个结论时,我们往往倾向于使用结论1里的这种四边形不等式。因为这种四边形不等式的等价形式只用到了两个变元 a a a, b b b,可以降低讨论的复杂度。
结论 2 2\quad 2在状态转移方程 F [ i , j ] = min i ⩽ k < j { F [ i , k ] + F [ k + 1 , j ] } + w ( i , j ) F[i,j]=\min\limits_{i\leqslant k<j} \{F[i,k]+F[k+1,j]\}+w(i,j) F[i,j]=i⩽k<jmin{F[i,k]+F[k+1,j]}+w(i,j) 中,若 w w w 满足区间包含单调性和四边形不等式,则 F F F 也满足四边形不等式,即
F ( i , j + 1 ) + F ( i + 1 , j ) ⩾ F ( i , j ) + F ( i + 1 , j + 1 ) F(i,j+1)+F(i+1,j)\geqslant F(i,j)+F(i+1,j+1) F(i,j+1)+F(i+1,j)⩾F(i,j)+F(i+1,j+1).
实际上,结论 2 2 2 中 F F F 满足的四边形不等式,在形式上就利用了结论1的结果。结论 2 2 2 与下面的结论 3 3 3 是密切联系在一起的。为了方便叙述,记 p [ i , j ] p[i,j] p[i,j] 为 F [ i , j ] F[i,j] F[i,j] 取到最小值时对应 k k k 的值,也就是说有: F [ i , j ] = F [ i , p [ i , j ] ] + F [ p [ i , j ] + 1 , j ] + w ( i , j ) F[i,j]=F[i,p[i,j]]+F[p[i,j]+1,j]+w(i,j) F[i,j]=F[i,p[i,j]]+F[p[i,j]+1,j]+w(i,j)于是,结论 3 3 3 如下:
结论 3 3\quad 3在状态转移方程 F [ i , j ] = min i ⩽ k < j { F [ i , k ] + F [ k + 1 , j ] } + w ( i , j ) F[i,j]=\min\limits_{i\leqslant k<j} \{F[i,k]+F[k+1,j]\}+w(i,j) F[i,j]=i⩽k<jmin{F[i,k]+F[k+1,j]}+w(i,j) 中,若 F F F 满足四边形不等式,则对任意 i < j i < j i<j,有
p [ i , j − 1 ] ⩽ p [ i , j ] ⩽ p [ i + 1 , j ] p[i,j-1]\leqslant p[i,j]\leqslant p[i+1,j] p[i,j−1]⩽p[i,j]⩽p[i+1,j].
结论
3
3
3 给出了使
F
[
i
,
j
]
F[i,j]
F[i,j] 最小的
k
k
k 值的上界
p
[
i
+
1
,
j
]
p[i+1,j]
p[i+1,j] 和下界
p
[
i
,
j
−
1
]
p[i,j-1]
p[i,j−1],这可以显著缩小
k
k
k 的搜索范围,这样沿着一条对角线从左上方到右下方依次计算
F
[
1
,
m
]
F[1,m]
F[1,m],
F
[
2
,
m
+
1
]
F[2,m+1]
F[2,m+1],···,
F
[
n
−
m
+
1
,
n
]
F[n-m+1,n]
F[n−m+1,n] 需要枚举
k
k
k 的总次数为:
∑
i
=
1
n
−
m
+
1
(
p
[
i
+
1
,
m
+
i
−
1
]
−
p
[
i
,
m
+
i
−
2
]
+
1
)
=
(
p
[
n
−
m
+
2
,
n
]
−
p
[
1
,
m
−
1
]
)
+
n
−
m
+
1
⩽
n
+
n
−
m
+
1
=
O
(
n
)
\begin{split} &\quad\displaystyle\sum_{i=1}^{n-m+1}(p[i+1,m+i-1]-p[i,m+i-2]+1) \\ &= (p[n-m+2,n]-p[1,m-1])+n-m+1\\ &\leqslant n + n-m+1 \\ &= \mathrm{O(n)} \end{split}
i=1∑n−m+1(p[i+1,m+i−1]−p[i,m+i−2]+1)=(p[n−m+2,n]−p[1,m−1])+n−m+1⩽n+n−m+1=O(n)而一共有
O
(
n
)
\mathrm{O(n)}
O(n) 个对角线,因此最终计算出所有
F
[
i
,
j
]
F[i,j]
F[i,j] 的总的时间复杂度就优化到了
O
(
n
2
)
\mathrm{O(n^2)}
O(n2)。
结论的详细证明
结论 1 1 1 的证明
接下来,我们来依次证明上面的三个结论。
结论
1
1\quad
1
w
(
x
,
y
)
w(x,y)
w(x,y) 是定义在整数集合上的二元函数,则
w
(
x
,
y
)
w(x,y)
w(x,y) 满足四边形不等式的充分必要条件是对于定义域内任意整数
a
,
b
(
a
<
b
)
a,b(a<b)
a,b(a<b),都有
证明: \quad 必要性:
\qquad\quad w ( x , y ) w(x,y) w(x,y)满足四边形不等式, a < a + 1 ⩽ b < b + 1 a<a+1\leqslant b<b+1 a<a+1⩽b<b+1,于是必要性显然成立。
\qquad\quad 充分性:
\qquad\quad 对 a < c a<c a<c,有 w ( a , c + 1 ) + w ( a + 1 , c ) ⩾ w ( a , c ) + w ( a + 1 , c + 1 ) w(a,c+1)+w(a+1,c)\geqslant w(a,c)+w(a+1,c+1) w(a,c+1)+w(a+1,c)⩾w(a,c)+w(a+1,c+1). 即 w ( a , c + 1 ) − w ( a , c ) ⩾ w ( a + 1 , c + 1 ) − w ( a + 1 , c ) ⩾ w ( a + 2 , c + 1 ) − w ( a + 2 , c ) ⋯ ⩾ w ( c , c + 1 ) − w ( c , c ) . \begin{split} &w(a,c+1)-w(a,c) \\ \geqslant& w(a+1,c+1)-w(a+1,c) \\ \geqslant& w(a+2,c+1)-w(a+2,c) \\ &\cdots \\ \geqslant& w(c,c+1)-w(c,c). \end{split} ⩾⩾⩾w(a,c+1)−w(a,c)w(a+1,c+1)−w(a+1,c)w(a+2,c+1)−w(a+2,c)⋯w(c,c+1)−w(c,c). \qquad\quad 于是 ∀ b ∈ [ a , c ] \forall\ b\in[a,c] ∀ b∈[a,c],都有 w ( a , c + 1 ) − w ( a , c ) ⩾ w ( b , c + 1 ) − w ( b , c ) w(a,c+1)-w(a,c)\geqslant w(b,c+1)-w(b,c) w(a,c+1)−w(a,c)⩾w(b,c+1)−w(b,c).
\qquad\quad 变形后可以得到: w ( a , c ) − w ( b , c ) ⩽ w ( a , c + 1 ) − w ( b , c + 1 ) . w(a,c)-w(b,c)\leqslant w(a,c+1)-w(b,c+1). w(a,c)−w(b,c)⩽w(a,c+1)−w(b,c+1).
\qquad\quad
对任意
d
⩾
c
d\geqslant c
d⩾c,不断运用上式,可以得到:
w
(
a
,
c
)
−
w
(
b
,
c
)
⩽
w
(
a
,
c
+
1
)
−
w
(
b
,
c
+
1
)
⩽
w
(
a
,
c
+
2
)
−
w
(
b
,
c
+
2
)
⋯
⩽
w
(
a
,
d
)
−
w
(
b
,
d
)
\begin{split} &w(a,c)-w(b,c) \\ \leqslant& w(a,c+1)-w(b,c+1) \\ \leqslant& w(a,c+2)-w(b,c+2) \\ &\cdots \\ \leqslant& w(a,d)-w(b,d) \end{split}
⩽⩽⩽w(a,c)−w(b,c)w(a,c+1)−w(b,c+1)w(a,c+2)−w(b,c+2)⋯w(a,d)−w(b,d)
\qquad\quad
即
w
(
a
,
d
)
+
w
(
b
,
c
)
⩾
w
(
a
,
c
)
+
w
(
b
,
d
)
w(a,d)+w(b,c)\geqslant w(a,c)+w(b,d)
w(a,d)+w(b,c)⩾w(a,c)+w(b,d). 充分性得证.
\qquad\quad
于是结论
1
1
1 得证.
结论 2 2 2 的证明
结论 2 2 2 是这三个结论中证明最麻烦的一个,涉及到多种情形需要分类讨论,OI-Wiki中用非常专业的数学语言表述了它,并且把它的证明放在了第一个,这无疑是非常劝退的。因此,我的建议是先理解结论 3 3 3 的证明,然后再回来啃结论 2 2 2。当然,如果你对证明过程没有兴趣,可以Pass。
结论 2 2\quad 2 在状态转移方程 F [ i , j ] = min i ⩽ k < j { F [ i , k ] + F [ k + 1 , j ] } + w ( i , j ) F[i,j]=\min\limits_{i\leqslant k<j} \{F[i,k]+F[k+1,j]\}+w(i,j) F[i,j]=i⩽k<jmin{F[i,k]+F[k+1,j]}+w(i,j) 中,若 w w w 满足区间包含单调性和四边形不等式,则 F F F 也满足四边形不等式,即
证明: \quad 用数学归纳法证明.
\qquad\quad ( 1 ) j = i + 1 时 (1)\ \ j=i+1时 (1) j=i+1时, F [ i , j ] = F [ i , i ] + F [ i + 1 , i + 1 ] + w ( i , i + 1 ) . F[i,j]=F[i,i]+F[i+1,i+1]+w(i,i+1). F[i,j]=F[i,i]+F[i+1,i+1]+w(i,i+1).
\qquad\quad 而 F [ i , j + 1 ] F[i,j+1] F[i,j+1] 有两种可能,需要分开讨论.
\qquad\quad 1 ∘ \mathbf{1^{\circ}}\; 1∘ 若 F [ i , j + 1 ] = F [ i , i ] + F [ i + 1 , i + 2 ] + w ( i , i + 2 ) F[i,j+1]=F[i,i]+F[i+1,i+2]+w(i,i+2) F[i,j+1]=F[i,i]+F[i+1,i+2]+w(i,i+2),则 F [ i , j + 1 ] − F [ i , j ] = F [ i , i + 2 ] − F [ i , i + 1 ] = F [ i + 1 , i + 2 ] − F [ i + 1 , i + 1 ] + w ( i , i + 2 ) − w ( i , i + 1 ) ⩾ F [ i + 1 , i + 2 ] − F [ i + 1 , i + 1 ] ( 上面利用了 w 的区间包含单调性 ) = F [ i + 1 , j + 1 ] − F [ i + 1 , j ] \begin{split} &\ \ F[i,j+1]-F[i,j] \\ =&\ F[i,i+2]-F[i,i+1] \\ =&\ F[i+1,i+2]-F[i+1,i+1]+ \\ &\ w(i,i+2)-w(i,i+1) \\ \geqslant&\ F[i+1,i+2]-F[i+1,i+1] \\ &\ \quad(上面利用了w的区间包含单调性) \\ =&\ F[i+1,j+1]-F[i+1,j] \end{split} ==⩾= F[i,j+1]−F[i,j] F[i,i+2]−F[i,i+1] F[i+1,i+2]−F[i+1,i+1]+ w(i,i+2)−w(i,i+1) F[i+1,i+2]−F[i+1,i+1] (上面利用了w的区间包含单调性) F[i+1,j+1]−F[i+1,j] \qquad\quad 因此, F F F 满足四边形不等式.
\qquad\quad
2
∘
\mathbf{2^{\circ}}\;
2∘ 若
F
[
i
,
j
+
1
]
=
F
[
i
,
i
+
1
]
+
F
[
i
+
2
,
i
+
2
]
+
w
(
i
,
i
+
2
)
F[i,j+1]=F[i,i+1]+F[i+2,i+2]+w(i,i+2)
F[i,j+1]=F[i,i+1]+F[i+2,i+2]+w(i,i+2),则
F
[
i
,
j
+
1
]
−
F
[
i
,
j
]
=
F
[
i
,
i
+
1
]
+
F
[
i
+
2
,
i
+
2
]
+
w
(
i
,
i
+
2
)
−
F
[
i
,
i
+
1
]
=
F
[
i
+
1
,
i
+
1
]
+
F
[
i
+
2
,
i
+
2
]
+
w
(
i
,
i
+
2
)
−
F
[
i
+
1
,
i
+
1
]
⩾
F
[
i
+
1
,
i
+
1
]
+
F
[
i
+
2
,
i
+
2
]
+
w
(
i
+
1
,
i
+
2
)
−
F
[
i
+
1
,
i
+
1
]
=
F
[
i
+
1
,
i
+
2
]
−
F
[
i
+
1
,
i
+
1
]
=
F
[
i
+
1
,
j
+
1
]
−
F
[
i
+
1
,
j
]
\begin{split} &\ \ F[i,j+1]-F[i,j] \\ =&\ F[i,i+1]+F[i+2,i+2]+ \\ &\ w(i,i+2)-F[i,i+1] \\ =&\ F[i+1,i+1]+F[i+2,i+2]+ \\ &\ w(i,i+2)-F[i+1,i+1] \\ \geqslant&\ F[i+1,i+1]+F[i+2,i+2]+\\ &\ w(i+1,i+2) - F[i+1,i+1] \\ =&\ F[i+1,i+2]-F[i+1,i+1] \\ =&\ F[i+1,j+1]-F[i+1,j] \end{split}
==⩾== F[i,j+1]−F[i,j] F[i,i+1]+F[i+2,i+2]+ w(i,i+2)−F[i,i+1] F[i+1,i+1]+F[i+2,i+2]+ w(i,i+2)−F[i+1,i+1] F[i+1,i+1]+F[i+2,i+2]+ w(i+1,i+2)−F[i+1,i+1] F[i+1,i+2]−F[i+1,i+1] F[i+1,j+1]−F[i+1,j]
\qquad\quad
因此,
F
F
F 满足四边形不等式.
\qquad\quad
综上,
j
=
i
+
1
j=i+1
j=i+1 时,
F
F
F 满足四边形不等式.
\qquad\quad ( 2 ) j = i + k ( k > 1 ) (2)\ j=i+k\ \ (k>1) (2) j=i+k (k>1) 时,假设 j < i + k j<i+k j<i+k 时 F F F 满足四边形不等式. 记
\qquad\quad F [ i , j ] = F [ i , x ] + F [ x + 1 , j ] + w ( i , j ) ( i ⩽ x < j ) F[i,j]=F[i,x]+F[x+1,j]+w(i,j)\quad(i\leqslant x <j) F[i,j]=F[i,x]+F[x+1,j]+w(i,j)(i⩽x<j)
\qquad\quad F [ i , j + 1 ] = F [ i , y ] + F [ y + 1 , j + 1 ] + w ( i , j + 1 ) ( i ⩽ y < j + 1 ) F[i,j+1]=F[i,y]+F[y+1,j+1]+w(i,j+1)\quad(i\leqslant y <j+1) F[i,j+1]=F[i,y]+F[y+1,j+1]+w(i,j+1)(i⩽y<j+1)
\qquad\quad
实际上,这里的
x
x
x 和
y
y
y 对应了结论
3
3
3 中的
p
[
i
,
j
]
p[i,j]
p[i,j] 和
p
[
i
,
j
+
1
]
p[i,j+1]
p[i,j+1].
\qquad\quad
根据结论
3
3
3,我们可以预先知道
p
[
i
,
j
]
⩽
p
[
i
,
j
+
1
]
p[i,j]\leqslant p[i,j+1]
p[i,j]⩽p[i,j+1],即
x
⩽
y
x\leqslant y
x⩽y. 倘若确定了
x
x
x 与
y
y
y 的大小关系,我们需要讨论的情形就变为原来的一半.
\qquad\quad
这里,
F
F
F 满足四边形不等式是我们要证明的结论,不能作为条件通过结论
3
3
3 直接得出
x
x
x 与
y
y
y 的大小关系. 下面,我们通过其他方法证明:一定能够找到一个
x
x
x,满足
x
⩽
y
x\leqslant y
x⩽y.
\qquad\quad
假设
x
>
y
x>y
x>y,由于
x
x
x 的最优性,所以有
F
[
i
,
j
]
=
F
[
i
,
x
]
+
F
[
x
+
1
,
j
]
+
w
(
i
,
j
)
⩽
F
[
i
,
y
]
+
F
[
y
+
1
,
j
]
+
w
(
i
,
j
)
\begin{split} F[i,j]=&\ F[i,x]+F[x+1,j]+w(i,j) \\ \leqslant&\ F[i,y]+F[y+1,j]+w(i,j) \end{split}
F[i,j]=⩽ F[i,x]+F[x+1,j]+w(i,j) F[i,y]+F[y+1,j]+w(i,j)
\qquad\quad
即
F
[
i
,
x
]
+
F
[
x
+
1
,
j
]
⩽
F
[
i
,
y
]
+
F
[
y
+
1
,
j
]
.
①
F[i,x]+F[x+1,j]\leqslant F[i,y]+F[y+1,j].\qquad ①
F[i,x]+F[x+1,j]⩽F[i,y]+F[y+1,j].①
\qquad\quad
同理,对于
F
[
i
,
j
+
1
]
F[i,j+1]
F[i,j+1],有:
F
[
i
,
y
]
+
F
[
y
+
1
,
j
+
1
]
⩽
F
[
i
,
x
]
+
F
[
x
+
1
,
j
+
1
]
.
F[i,y]+F[y+1,j+1]\leqslant F[i,x]+F[x+1,j+1].
F[i,y]+F[y+1,j+1]⩽F[i,x]+F[x+1,j+1].
\qquad\quad
对
y
+
1
⩽
x
+
1
⩽
j
⩽
j
+
1
y+1\leqslant x+1\leqslant j\leqslant j+1
y+1⩽x+1⩽j⩽j+1,根据前面的假设,有关于
F
F
F 的四边形不等式变形:
F
[
x
+
1
,
j
]
−
F
[
y
+
1
,
j
]
⩾
F
[
x
+
1
,
j
+
1
]
−
F
[
y
+
1
,
j
+
1
]
.
F[x+1,j]-F[y+1,j]\geqslant F[x+1,j+1]-F[y+1,j+1].
F[x+1,j]−F[y+1,j]⩾F[x+1,j+1]−F[y+1,j+1].
\qquad\quad
于是,
(
F
[
i
,
x
]
+
F
[
x
+
1
,
j
]
)
−
(
F
[
i
,
y
]
+
F
[
y
+
1
,
j
]
)
=
(
F
[
i
,
x
]
−
F
[
i
,
y
]
)
+
(
F
[
x
+
1
,
j
]
−
F
[
y
+
1
,
j
]
)
⩾
(
F
[
i
,
x
]
−
F
[
i
,
y
]
)
+
(
F
[
x
+
1
,
j
+
1
]
−
F
[
y
+
1
,
j
+
1
]
)
=
(
F
[
i
,
x
]
+
F
[
x
+
1
,
j
+
1
]
)
−
(
F
[
i
,
y
]
+
F
[
y
+
1
,
j
+
1
]
)
⩾
0
\begin{split} &\ \ (F[i,x]+F[x+1,j])-(F[i,y]+F[y+1,j]) \\ =&\ (F[i,x]-F[i,y])+(F[x+1,j]-F[y+1,j]) \\ \geqslant&\ (F[i,x]-F[i,y])+(F[x+1,j+1]-F[y+1,j+1]) \\ =&\ (F[i,x]+F[x+1,j+1])-(F[i,y]+F[y+1,j+1]) \\ \geqslant&\ 0 \end{split}
=⩾=⩾ (F[i,x]+F[x+1,j])−(F[i,y]+F[y+1,j]) (F[i,x]−F[i,y])+(F[x+1,j]−F[y+1,j]) (F[i,x]−F[i,y])+(F[x+1,j+1]−F[y+1,j+1]) (F[i,x]+F[x+1,j+1])−(F[i,y]+F[y+1,j+1]) 0
\qquad\quad
即
F
[
i
,
x
]
+
F
[
x
+
1
,
j
]
⩾
F
[
i
,
y
]
+
F
[
y
+
1
,
j
]
.
②
F[i,x]+F[x+1,j]\geqslant F[i,y]+F[y+1,j].\qquad ②
F[i,x]+F[x+1,j]⩾F[i,y]+F[y+1,j].②
\qquad\quad
由
①②
①②
①②,
F
[
i
,
x
]
+
F
[
x
+
1
,
j
]
=
F
[
i
,
y
]
+
F
[
y
+
1
,
j
]
.
F[i,x]+F[x+1,j]=F[i,y]+F[y+1,j].
F[i,x]+F[x+1,j]=F[i,y]+F[y+1,j].
\qquad\quad
取
x
′
=
y
x^{\prime}=y
x′=y,
x
′
x^{\prime}
x′ 也可以使
F
[
i
,
j
]
F[i,j]
F[i,j] 取到最小值.
\qquad\quad
因此,一定能够找到一个
x
x
x,满足
x
⩽
y
x\leqslant y
x⩽y.
\qquad\quad
后面的证明中,我们都设
x
⩽
y
x\leqslant y
x⩽y. 接下来,分两种情况讨论.
\qquad\quad 1 ∘ \mathbf{1^{\circ}}\; 1∘ 若 i + 1 ⩽ x ⩽ y i+1\leqslant x \leqslant y i+1⩽x⩽y,根据前面的假设,有
\qquad\quad w w w 满足四边形不等式,因此 w ( i , j + 1 ) − w ( i , j ) ⩾ w ( i + 1 , j + 1 ) − w ( i + 1 , j ) . w(i,j+1)-w(i,j)\geqslant w(i+1,j+1)-w(i+1,j). w(i,j+1)−w(i,j)⩾w(i+1,j+1)−w(i+1,j). \qquad\quad 从而 F [ i , j + 1 ] − F [ i , j ] = F [ i , y ] − F [ i , x ] + F [ y + 1 , j + 1 ] − F [ x + 1 , j ] + w ( i , j + 1 ) − w ( i , j ) ⩾ F [ i + 1 , y ] + F [ y + 1 , j + 1 ] + w ( i + 1 , j + 1 ) − ( F [ i + 1 , x ] + F [ x + 1 , j ] + w ( i + 1 , j ) ) = F [ i + 1 , j + 1 ] − F [ i + 1 , j ] \begin{split} &\ \ F[i,j+1]-F[i,j] \\ =&\ F[i,y]-F[i,x]+F[y+1,j+1]\\ &\ -F[x+1,j]+w(i,j+1)-w(i,j) \\ \geqslant&\ F[i+1,y]+F[y+1,j+1]+w(i+1,j+1)\\ &\ -(F[i+1,x]+F[x+1,j]+w(i+1,j))\\ =&\ F[i+1,j+1]-F[i+1,j] \end{split} =⩾= F[i,j+1]−F[i,j] F[i,y]−F[i,x]+F[y+1,j+1] −F[x+1,j]+w(i,j+1)−w(i,j) F[i+1,y]+F[y+1,j+1]+w(i+1,j+1) −(F[i+1,x]+F[x+1,j]+w(i+1,j)) F[i+1,j+1]−F[i+1,j] \qquad\quad 此时, F F F 满足四边形不等式.
\qquad\quad 2 ∘ \mathbf{2^{\circ}}\; 2∘ 若 y = i y=i y=i,由 i ⩽ x ⩽ y i\leqslant x\leqslant y i⩽x⩽y,得 x = i x=i x=i.
\qquad\quad 从而 F [ i , j + 1 ] − F [ i , j ] = ( F [ i , i ] − F [ i , i ] ) + F [ i + 1 , j + 1 ] − F [ i + 1 , j ] + ( w ( i , j + 1 ) − w ( i , j ) ) ⩾ F [ i + 1 , j + 1 ] − F [ i + 1 , j ] \begin{split} &\ \ F[i,j+1]-F[i,j] \\ =&\ (F[i,i]-F[i,i])+F[i+1,j+1]\\ &\ -F[i+1,j]+(w(i,j+1)-w(i,j)) \\ \geqslant&\ F[i+1,j+1]-F[i+1,j] \end{split} =⩾ F[i,j+1]−F[i,j] (F[i,i]−F[i,i])+F[i+1,j+1] −F[i+1,j]+(w(i,j+1)−w(i,j)) F[i+1,j+1]−F[i+1,j] \qquad\quad 此时, F F F 满足四边形不等式.
\qquad\quad j = i + k j=i+k j=i+k 时, F F F 满足四边形不等式.
\qquad\quad 由 ( 1 ) ( 2 ) (1)(2) (1)(2),结论 2 2 2 得证.
结论 3 3 3 的证明
结论 3 3\quad 3 在状态转移方程 F [ i , j ] = min i ⩽ k < j { F [ i , k ] + F [ k + 1 , j ] } + w ( i , j ) F[i,j]=\min\limits_{i\leqslant k<j} \{F[i,k]+F[k+1,j]\}+w(i,j) F[i,j]=i⩽k<jmin{F[i,k]+F[k+1,j]}+w(i,j) 中,若 F F F 满足四边形不等式,则对任意 i < j i < j i<j,有
证明: \quad 为了便于叙述,我们记 p = p [ i , j ] p=p[i,j] p=p[i,j], i ⩽ p < j i\leqslant p<j i⩽p<j.
\qquad\quad 于是,对任意 i ⩽ k < j i\leqslant k<j i⩽k<j,有 F [ i , j ] = F [ i , p ] + F [ p + 1 , j ] + w ( i , j ) ⩽ F [ i , k ] + F [ k + 1 , j ] + w ( i , j ) \begin{split} F[i,j]&=F[i,p]+F[p+1,j]+w(i,j) \\ &\leqslant F[i,k]+F[k+1,j]+w(i,j) \\ \end{split} F[i,j]=F[i,p]+F[p+1,j]+w(i,j)⩽F[i,k]+F[k+1,j]+w(i,j) \qquad\quad 即 F [ i , k ] + F [ k + 1 , j ] ⩾ F [ i , p ] + F [ p + 1 , j ] . F[i,k]+F[k+1,j]\geqslant F[i,p]+F[p+1,j]. F[i,k]+F[k+1,j]⩾F[i,p]+F[p+1,j]. \qquad\quad 由于 F F F 满足四边形不等式,因此有:
\qquad\quad 对 k ∈ ( i , p ] k \in(i,p] k∈(i,p],有 F [ i + 1 , k ] − F [ i + 1 , p ] ⩾ F [ i , k ] − F [ i , p ] . F[i+1,k]-F[i+1,p]\geqslant F[i,k]-F[i,p]. F[i+1,k]−F[i+1,p]⩾F[i,k]−F[i,p]. \qquad\quad 对 k ∈ [ p , j − 1 ) k \in[p,j-1) k∈[p,j−1),有 F [ k + 1 , j − 1 ] − F [ p + 1 , j − 1 ] ⩾ F [ k + 1 , j ] − F [ p + 1 , j ] . F[k+1,j-1]-F[p+1,j-1]\geqslant F[k+1,j]-F[p+1,j]. F[k+1,j−1]−F[p+1,j−1]⩾F[k+1,j]−F[p+1,j]. \qquad\quad 1 ∘ \mathbf{1^{\circ}}\; 1∘ 先证 p = p [ i , j ] ⩽ p [ i + 1 , j ] p=p[i,j]\leqslant p[i+1,j] p=p[i,j]⩽p[i+1,j].
\qquad\quad 若 p = i p=i p=i,则 p < i + 1 ⩽ p [ i + 1 , j ] p < i+1 \leqslant p[i+1,j] p<i+1⩽p[i+1,j] 显然成立.
\qquad\quad 若 i < p < j i<p<j i<p<j, ∀ k ∈ ( i , p ] \forall\ k \in(i,p] ∀ k∈(i,p],有 ( F [ i + 1 , k ] + F [ k + 1 , j ] + w ( i + 1 , j ) ) − ( F [ i + 1 , p ] + F [ p + 1 , j ] + w ( i + 1 , j ) ) = ( F [ i + 1 , k ] − F [ i + 1 , p ] ) + F [ k + 1 , j ] − F [ p + 1 , j ] ⩾ F [ i , k ] − F [ i , p ] + F [ k + 1 , j ] − F [ p + 1 , j ] = ( F [ i , k ] + F [ k + 1 , j ] ) − ( F [ i , p ] + F [ p + 1 , j ] ) ⩾ 0. \begin{split} &(F[i+1,k]+F[k+1,j]+w(i+1,j))-\\ &(F[i+1,p]+F[p+1,j]+w(i+1,j))\\ =&(F[i+1,k]-F[i+1,p])+F[k+1,j]-F[p+1,j] \\ \geqslant&F[i,k]-F[i,p]+F[k+1,j]-F[p+1,j] \\ =&(F[i,k]+F[k+1,j])- (F[i,p]+F[p+1,j]) \\ \geqslant&0. \end{split} =⩾=⩾(F[i+1,k]+F[k+1,j]+w(i+1,j))−(F[i+1,p]+F[p+1,j]+w(i+1,j))(F[i+1,k]−F[i+1,p])+F[k+1,j]−F[p+1,j]F[i,k]−F[i,p]+F[k+1,j]−F[p+1,j](F[i,k]+F[k+1,j])−(F[i,p]+F[p+1,j])0. \qquad\quad 可见,取 k = p k=p k=p 可令 F [ i + 1 , j ] F[i+1,j] F[i+1,j] 在 k ∈ ( i , p ] k\in(i,p] k∈(i,p] 上取得最小值.
\qquad\quad 因此,使得 F [ i + 1 , j ] F[i+1,j] F[i+1,j] 取得最小值的 p [ i + 1 , j ] p[i+1,j] p[i+1,j] 一定不小于 p [ i , j ] p[i,j] p[i,j].
\qquad\quad 至此, p [ i , j ] ⩽ p [ i + 1 , j ] p[i,j]\leqslant p[i+1,j] p[i,j]⩽p[i+1,j] 得证.
\qquad\quad
2
∘
\mathbf{2^{\circ}}\;
2∘ 再来证明:
p
[
i
,
j
−
1
]
⩽
p
[
i
,
j
]
=
p
p[i,j-1]\leqslant p[i,j]=p
p[i,j−1]⩽p[i,j]=p.
\qquad\quad
(方法和
1
∘
\mathbf{1^{\circ}}
1∘同理,可以选择性地skip.)
\qquad\quad
若
p
=
j
−
1
p = j-1
p=j−1,
p
[
i
,
j
−
1
]
⩽
p
p[i,j-1]\leqslant p
p[i,j−1]⩽p 显然成立.
\qquad\quad
若
i
⩽
p
<
j
−
1
i\leqslant p < j-1
i⩽p<j−1,
∀
k
∈
[
p
,
j
−
1
)
\forall\ k \in [p,j-1)
∀ k∈[p,j−1),有
(
F
[
i
,
k
]
+
F
[
k
+
1
,
j
−
1
]
+
w
(
i
,
j
−
1
)
)
−
(
F
[
i
,
p
]
+
F
[
p
+
1
,
j
−
1
]
+
w
(
i
,
j
−
1
)
)
=
(
F
[
k
+
1
,
j
−
1
]
−
F
[
p
+
1
,
j
−
1
]
)
+
F
[
i
,
k
]
−
F
[
i
,
p
]
⩾
F
[
k
+
1
,
j
]
−
F
[
p
+
1
,
j
]
+
F
[
i
,
k
]
−
F
[
i
,
p
]
=
(
F
[
i
,
k
]
+
F
[
k
+
1
,
j
]
)
−
(
F
[
i
,
p
]
+
F
[
p
+
1
,
j
]
)
⩾
0.
\begin{split} &(F[i,k]+F[k+1,j-1]+w(i,j-1))-\\ & (F[i,p]+F[p+1,j-1]+w(i,j-1))\\ =&(F[k+1,j-1]-F[p+1,j-1])+F[i,k]-F[i,p] \\ \geqslant&F[k+1,j]-F[p+1,j]+F[i,k]-F[i,p] \\ =&(F[i,k]+F[k+1,j])- (F[i,p]+F[p+1,j]) \\ \geqslant&0. \end{split}
=⩾=⩾(F[i,k]+F[k+1,j−1]+w(i,j−1))−(F[i,p]+F[p+1,j−1]+w(i,j−1))(F[k+1,j−1]−F[p+1,j−1])+F[i,k]−F[i,p]F[k+1,j]−F[p+1,j]+F[i,k]−F[i,p](F[i,k]+F[k+1,j])−(F[i,p]+F[p+1,j])0.
\qquad\quad
可见,取
k
=
p
k=p
k=p 可令
F
[
i
,
j
−
1
]
F[i,j-1]
F[i,j−1] 在
k
∈
[
p
,
j
−
1
)
k\in[p,j-1)
k∈[p,j−1) 上取得最小值.
\qquad\quad
因此,
p
[
i
,
j
−
1
]
⩽
p
[
i
,
j
]
p[i,j-1]\leqslant p[i,j]
p[i,j−1]⩽p[i,j] 得证.
\qquad\quad
于是结论
3
3
3 得证.
小结
我们已经完成了对三个结论的证明,至此,对最开始提出的状态转移方程的优化就告一段落了。关于动态规划的四边形不等式优化,其实还有不少可以挖掘的内容:OI-Wiki中进一步讨论了满足四边形不等式的函数类,知乎Pecco的文章里还提到了可以用四边形不等式进行优化的另一种形式的DP状态转移方程,还有一些常见的可以用四边形不等式优化的经典例题,限于时间和篇幅,这里暂时就不深入讨论了。