四边形不等式:
任意
a
≤
b
≤
c
≤
d
a\le b\le c\le d
a≤b≤c≤d,有
w
(
a
,
d
)
+
w
(
b
,
c
)
≥
w
(
a
,
c
)
+
w
(
b
,
d
)
w(a,d)+w(b,c)\ge w(a,c)+w(b,d)
w(a,d)+w(b,c)≥w(a,c)+w(b,d)
一维
D
P
DP
DP 的优化
对于转移方程
f
i
=
m
i
n
(
f
j
+
v
a
l
(
j
,
i
)
)
f_i=min(f_j+val(j,i))
fi=min(fj+val(j,i))
令
p
i
p_i
pi 为
f
i
f_i
fi 的最优决策点
若
v
a
l
val
val 满足四边形不等式,则
f
f
f 具有决策单调性
证明:
首先
p
i
p_i
pi 是最优的
f
p
i
+
v
a
l
(
p
i
,
i
)
≤
f
j
+
v
a
l
(
j
,
i
)
.
.
.
1
f_{p_i}+val(p_i,i)\le f_j+val(j,i)...1
fpi+val(pi,i)≤fj+val(j,i)...1
推广到
i
+
1
i+1
i+1
想要证:
f
p
i
+
v
a
l
(
p
i
,
i
+
1
)
≤
f
j
+
v
a
l
(
j
,
i
+
1
)
f_{p_i}+val(p_i,i+1)\le f_j+val(j,i+1)
fpi+val(pi,i+1)≤fj+val(j,i+1)
考虑到
v
a
l
(
j
,
i
+
1
)
+
v
a
l
(
p
i
,
i
)
≥
v
a
l
(
j
,
i
)
+
v
a
l
(
p
i
,
i
+
1
)
val(j,i+1)+val(p_i,i)\ge val(j,i)+val(p_i,i+1)
val(j,i+1)+val(pi,i)≥val(j,i)+val(pi,i+1)
即
v
a
l
(
p
i
,
i
+
1
)
−
v
a
l
(
p
i
,
i
)
≤
v
a
l
(
j
,
i
+
1
)
−
v
a
l
(
j
,
i
)
val(p_i,i+1)-val(p_i,i)\le val(j,i+1)-val(j,i)
val(pi,i+1)−val(pi,i)≤val(j,i+1)−val(j,i)
加到
1
1
1 式
有
f
p
i
+
v
a
l
(
p
i
,
i
+
1
)
≤
f
j
+
v
a
l
(
j
,
i
+
1
)
f_{p_i}+val(p_i,i+1)\le f_j+val(j,i+1)
fpi+val(pi,i+1)≤fj+val(j,i+1)
如何维护?
考虑一个
i
i
i 能作为哪些决策点的最优决策点
我们可以维护一个
[
1
,
n
]
[1,n]
[1,n] 的数组,存每一个点的最优决策点
根据决策单调性,我们最后一定能找到一个
p
o
s
pos
pos,使得
p
o
s
pos
pos 后面的决策用
i
i
i 更优
考虑用一个三元组
(
i
,
l
,
r
)
(i,l,r)
(i,l,r) 表示
[
l
,
r
]
[l,r]
[l,r] 都以
i
i
i 为最优决策
每次找到
p
o
s
pos
pos 之后,插入
(
i
,
p
o
s
,
n
)
(i,pos,n)
(i,pos,n) 即可
如何找到
p
o
s
pos
pos
更队尾的三元组的
l
l
l 比较,如果更优,显然这个三元组没有用
如果不是更优,那么显然转折点在
(
l
,
r
]
(l,r]
(l,r] 内,二分这个位置即可
然后队头动态弹掉
[
1
,
i
−
1
]
[1,i-1]
[1,i−1] 的决策,取出来的队头就是
i
i
i 的决策点了
复杂度
O
(
n
l
o
g
(
n
)
)
O(nlog(n))
O(nlog(n))
二维
D
P
DP
DP 的优化
性质1:对于方程
f
l
,
r
=
f
l
,
p
+
f
p
+
1
,
r
+
w
(
i
,
j
)
f_{l,r}=f_{l,p}+f_{p+1,r}+w(i,j)
fl,r=fl,p+fp+1,r+w(i,j)
若
w
w
w 满足四边形不等式且任意
a
≤
b
≤
c
≤
d
a\le b\le c\le d
a≤b≤c≤d,
w
(
a
,
d
)
≥
w
(
b
,
c
)
w(a,d)\ge w(b,c)
w(a,d)≥w(b,c)
那么
f
f
f 也满足四边形不等式
证明:
要证 对于任意
i
,
j
(
i
<
j
)
i,j(i<j)
i,j(i<j),
f
[
i
]
[
j
]
+
f
[
i
+
1
]
[
j
+
1
]
≤
f
[
i
+
1
]
[
j
]
+
f
[
i
]
[
j
+
1
]
f[i][j]+f[i+1][j+1]\le f[i+1][j]+f[i][j+1]
f[i][j]+f[i+1][j+1]≤f[i+1][j]+f[i][j+1]
考虑归纳证明:
令
f
[
i
+
1
]
[
j
]
f[i+1][j]
f[i+1][j]取得最优值的时候
k
=
x
k=x
k=x
令
f
[
i
]
[
j
+
1
]
f[i][j+1]
f[i][j+1]取得最优值的时候
k
=
y
k=y
k=y
令
x
≤
y
x \le y
x≤y
将
k
=
x
,
k
=
y
k=x,k=y
k=x,k=y代入
f
[
i
]
[
x
]
+
f
[
x
+
1
]
[
j
]
+
w
(
i
,
j
)
+
f
[
i
+
1
]
[
y
]
+
f
[
y
+
1
]
[
j
+
1
]
+
w
(
i
+
1
,
j
+
1
)
f[i][x]+f[x+1][j]+w(i,j)+f[i+1][y]+f[y+1][j+1]+w(i+1,j+1)
f[i][x]+f[x+1][j]+w(i,j)+f[i+1][y]+f[y+1][j+1]+w(i+1,j+1)
考虑到
w
(
i
,
j
)
+
w
(
i
+
1
,
j
+
1
)
≤
w
(
i
,
j
+
1
)
+
w
(
i
+
1
,
j
)
w(i,j)+w(i+1,j+1)\le w(i,j+1)+w(i+1,j)
w(i,j)+w(i+1,j+1)≤w(i,j+1)+w(i+1,j)
继续替换右边
f
[
i
+
1
]
[
x
]
+
f
[
x
+
1
]
[
j
]
+
w
(
i
+
1
,
j
)
+
f
[
i
]
[
y
]
+
f
[
y
+
1
]
[
j
+
1
]
+
w
(
i
,
j
+
1
)
f[i+1][x]+f[x+1][j]+w(i+1,j)+f[i][y]+f[y+1][j+1]+w(i,j+1)
f[i+1][x]+f[x+1][j]+w(i+1,j)+f[i][y]+f[y+1][j+1]+w(i,j+1)
又由归纳假设
f
[
i
]
[
x
]
+
f
[
i
+
1
]
[
y
]
≤
f
[
i
+
1
]
[
x
]
+
f
[
i
]
[
y
]
f[i][x]+f[i+1][y]\le f[i+1][x]+f[i][y]
f[i][x]+f[i+1][y]≤f[i+1][x]+f[i][y]
且
w
(
i
,
j
)
+
w
(
i
+
1
,
j
+
1
)
≤
w
(
i
+
1
,
j
)
+
w
(
i
,
j
+
1
)
w(i,j)+w(i+1,j+1)\le w(i+1,j)+w(i,j+1)
w(i,j)+w(i+1,j+1)≤w(i+1,j)+w(i,j+1)
所以
f
[
i
]
[
j
]
+
f
[
i
+
1
]
[
j
+
1
]
≤
f
[
i
+
1
]
[
j
]
+
f
[
i
]
[
j
+
1
]
f[i][j]+f[i+1][j+1]\le f[i+1][j]+f[i][j+1]
f[i][j]+f[i+1][j+1]≤f[i+1][j]+f[i][j+1]
对于
x
>
y
x>y
x>y 的情况同理
性质 2:
记
p
[
i
]
[
j
]
p[i][j]
p[i][j] 为
[
i
,
j
]
[i,j]
[i,j] 的决策点
若
f
f
f 满足四边形不等式,则
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]
对于一个决策点
k
∈
(
i
,
p
]
k\in(i,p]
k∈(i,p]
有
f
[
i
]
[
p
]
+
f
[
i
+
1
]
[
k
]
≥
f
[
i
]
[
k
]
+
f
[
i
+
1
]
[
p
]
f[i][p]+f[i+1][k]\ge f[i][k]+f[i+1][p]
f[i][p]+f[i+1][k]≥f[i][k]+f[i+1][p]
即
f
[
i
+
1
]
[
k
]
−
f
[
i
+
1
]
[
p
]
≥
f
[
i
]
[
k
]
−
f
[
i
]
[
p
]
f[i+1][k]-f[i+1][p]\ge f[i][k]-f[i][p]
f[i+1][k]−f[i+1][p]≥f[i][k]−f[i][p]
由
p
p
p 是最优决策点,又有
f
[
i
]
[
k
]
+
f
[
k
+
1
]
[
j
]
≥
f
[
i
]
[
p
]
+
f
[
p
+
1
]
[
j
]
f[i][k]+f[k+1][j]\ge f[i][p]+f[p+1][j]
f[i][k]+f[k+1][j]≥f[i][p]+f[p+1][j]
想要推广到
i
+
1
i+1
i+1
有
f
[
i
+
1
]
[
k
]
+
f
[
k
+
1
]
[
j
]
−
(
f
[
i
+
1
]
[
p
]
+
f
[
p
+
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
]
≥
0
f[i+1][k]+f[k+1][j]-(f[i+1][p]+f[p+1][j])=(f[i+1][k]-f[i+1][p])+(f[k+1][j]-f[p+1][j])\ge f[i][k]-f[i][p]+f[k+1][j]-f[p+1][j]\ge 0
f[i+1][k]+f[k+1][j]−(f[i+1][p]+f[p+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]≥0
所以对于
f
[
i
+
1
]
[
j
]
f[i+1][j]
f[i+1][j],
p
p
p 比任意
k
≤
p
[
i
]
[
j
]
k\le p[i][j]
k≤p[i][j] 优,因此
p
[
i
+
1
]
[
j
]
≥
p
[
i
]
[
j
]
p[i+1][j]\ge p[i][j]
p[i+1][j]≥p[i][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 + 1 ] [ j ] − p [ i ] [ j − 1 ] = O ( n 2 ) \sum p[i+1][j]-p[i][j-1]=O(n^2) ∑p[i+1][j]−p[i][j−1]=O(n2)