前言
只是简单地写一写,并不是什么很详细的解说。 d p \tt dp dp 这东西还是要多做题。
为何单调
单调队列 / / / 单调栈 / / / 斜率优化
平行四边形
其实主要就想讲这一个。
形如 f ( i ) = min j = 0 i − 1 f ( j ) + w ( j , i ) f(i)=\min_{j=0}^{i-1}f(j)+w(j,i) f(i)=minj=0i−1f(j)+w(j,i) 的一维 d p \tt dp dp 决策单调性的充要条件:对于 a < b < c < d a<b<c<d a<b<c<d,
- 如果 f ( a ) + w ( a , c ) ≥ f ( b ) + w ( b , c ) f(a)+w(a,c)\ge f(b)+w(b,c) f(a)+w(a,c)≥f(b)+w(b,c)(即,在决策 c c c 时 b b b 更优)
- 则 f ( a ) + w ( a , d ) ≥ f ( b ) + w ( b , d ) f(a)+w(a,d)\ge f(b)+w(b,d) f(a)+w(a,d)≥f(b)+w(b,d)(即,在决策 d d d 时 b b b 仍然更优)
把上面的式子翻译一下,等价于
f
(
a
)
−
f
(
b
)
≥
w
(
b
,
c
)
−
w
(
a
,
c
)
⇒
f
(
a
)
−
f
(
b
)
≥
w
(
b
,
d
)
−
w
(
a
,
d
)
\begin{aligned} f(a)-f(b)&\ge w(b,c)-w(a,c)\\ \Rightarrow f(a)-f(b)&\ge w(b,d)-w(a,d) \end{aligned}
f(a)−f(b)⇒f(a)−f(b)≥w(b,c)−w(a,c)≥w(b,d)−w(a,d)
那就有一个决策单调性的 充分条件:
w
(
b
,
c
)
−
w
(
a
,
c
)
≥
w
(
b
,
d
)
−
w
(
a
,
d
)
⇔
w
(
a
,
d
)
+
w
(
b
,
c
)
≥
w
(
a
,
c
)
+
w
(
b
,
d
)
w(b,c)-w(a,c)\ge w(b,d)-w(a,d)\\ \Leftrightarrow\;w(a,d)+w(b,c)\ge w(a,c)+w(b,d)
w(b,c)−w(a,c)≥w(b,d)−w(a,d)⇔w(a,d)+w(b,c)≥w(a,c)+w(b,d)
即大名鼎鼎的平行四边形不等式(交叉优于包含)。它有一个 充要条件 是
i
<
j
i<j
i<j 时
w
(
i
,
j
+
1
)
+
w
(
i
+
1
,
j
)
≥
w
(
i
,
j
)
+
w
(
i
+
1
,
j
+
1
)
w(i,j+1)+w(i+1,j)\ge w(i,j)+w(i+1,j+1)
w(i,j+1)+w(i+1,j)≥w(i,j)+w(i+1,j+1)
即 大名鼎鼎的 列的差值在行上递减。因为其移项得到
w
(
i
,
j
+
1
)
−
w
(
i
,
j
)
≥
w
(
i
+
1
,
j
+
1
)
−
w
(
i
+
1
,
j
)
w(i,j+1)-w(i,j)\ge 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)
也即
b
−
a
=
d
−
c
=
1
b-a=d-c=1
b−a=d−c=1 时的平行四边形不等式,必要性显然了。证明一下充分性。
∑
j
=
c
d
−
1
[
w
(
i
,
j
+
1
)
−
w
(
i
,
j
)
]
≥
∑
j
=
c
d
−
1
[
w
(
i
+
1
,
j
+
1
)
−
w
(
i
+
1
,
j
)
]
⇔
w
(
i
,
d
)
−
w
(
i
,
c
)
≥
w
(
i
+
1
,
d
)
−
w
(
i
+
1
,
c
)
⇔
w
(
i
,
d
)
−
w
(
i
+
1
,
d
)
≥
w
(
i
,
c
)
−
w
(
i
+
1
,
c
)
⇒
∑
i
=
a
b
−
1
[
w
(
i
,
d
)
−
w
(
i
+
1
,
d
)
]
≥
∑
i
=
a
b
−
1
[
w
(
i
,
c
)
−
w
(
i
+
1
,
c
)
]
⇔
w
(
a
,
d
)
−
w
(
b
,
d
)
≥
w
(
a
,
c
)
−
w
(
b
,
c
)
⇔
w
(
a
,
d
)
+
w
(
b
,
c
)
≥
w
(
a
,
c
)
+
w
(
b
,
d
)
\begin{aligned} \sum_{j=c}^{d-1}\big[w(i,j+1)-w(i,j)\big] &\ge \sum_{j=c}^{d-1}\big[w(i+1,j+1)-w(i+1,j)\big]\\ \Leftrightarrow w(i,d)-w(i,c) &\ge w(i+1,d)-w(i+1,c)\\ \Leftrightarrow w(i,d)-w(i+1,d) &\ge w(i,c)-w(i+1,c)\\ \Rightarrow\sum_{i=a}^{b-1}\big[w(i,d)-w(i+1,d)\big] &\ge \sum_{i=a}^{b-1}\big[w(i,c)-w(i+1,c)\big]\\ \Leftrightarrow w(a,d)-w(b,d) &\ge w(a,c)-w(b,c)\\ \Leftrightarrow w(a,d)+w(b,c) &\ge w(a,c)+w(b,d) \end{aligned}
j=c∑d−1[w(i,j+1)−w(i,j)]⇔w(i,d)−w(i,c)⇔w(i,d)−w(i+1,d)⇒i=a∑b−1[w(i,d)−w(i+1,d)]⇔w(a,d)−w(b,d)⇔w(a,d)+w(b,c)≥j=c∑d−1[w(i+1,j+1)−w(i+1,j)]≥w(i+1,d)−w(i+1,c)≥w(i,c)−w(i+1,c)≥i=a∑b−1[w(i,c)−w(i+1,c)]≥w(a,c)−w(b,c)≥w(a,c)+w(b,d)
所以不需要对于任意 a , b , c , d a,b,c,d a,b,c,d 判断,只需要判定 ⟨ i , i + 1 , j , j + 1 ⟩ \langle i,i+1,j,j+1\rangle ⟨i,i+1,j,j+1⟩ 即可。
如果 w ( l , r ) w(l,r) w(l,r) 只跟区间内信息有关,区间信息又具有可加性,并且均为 “正数”,那么 w w w 为凸函数即满足决策单调性。证明就可以大家自己推导了。
二维
d
p
\tt dp
dp 呢?一般性的二维
d
p
\tt dp
dp 我也不会优化。不过,如果其中一维是 “个数”,即形如
f
(
i
,
j
)
=
min
k
=
0
j
−
1
f
(
i
−
1
,
k
)
+
w
(
k
,
j
)
+
ω
(
i
)
f(i,j)=\min_{k=0}^{j-1}f(i-1,k)+w(k,j)+\omega(i)
f(i,j)=k=0minj−1f(i−1,k)+w(k,j)+ω(i)
那就还有回旋的余地。因为根据上面的过程可知,只要
w
w
w 满足平行四边形不等式,决策点在同行上仍然单调。
另一种特殊的二维
d
p
\tt dp
dp 是区间
d
p
\tt dp
dp 。形如
f
(
i
,
j
)
=
w
(
i
,
j
)
+
min
k
=
i
j
−
1
f
(
i
,
k
)
+
f
(
k
+
1
,
j
)
f(i,j)=w(i,j)+\min_{k=i}^{j-1}f(i,k)+f(k+1,j)
f(i,j)=w(i,j)+k=iminj−1f(i,k)+f(k+1,j)
不妨设
w
(
i
,
j
)
w(i,j)
w(i,j) 仍然满足平行四边形不等式。我们可以证明,
f
(
i
,
j
)
f(i,j)
f(i,j) 也满足平行四边形不等式,并且其决策点
s
(
i
,
j
)
s(i,j)
s(i,j) 满足
s
(
i
,
j
−
1
)
≤
s
(
i
,
j
)
≤
s
(
i
+
1
,
j
)
s(i,j-1)\le s(i,j)\le s(i+1,j)
s(i,j−1)≤s(i,j)≤s(i+1,j)
我不会证明。可以看看百度百科怎么证明的。但是我证明不了
f
f
f 满足平行四边形不等式……
利用单调
二分
用一个栈存储所有决策点。相邻的决策点之间,用二分找到分界点 x x x(即, i ≤ x i\le x i≤x 则应当从 a a a 转移, i > x i>x i>x 则应当从 b b b 转移),如果一个决策点没有任何生存空间,出栈。
分治
有的问题需要的信息,与整体二分是类似的:扫描整个序列可以处理所有询问,但是对于单个询问不能亚线性直接处理。
考虑对于 m i d mid mid 直接扫描整个序列求出其决策点,然后左右分别递归。一个细节是,递归时要保证复杂度不超过 O ( \mathcal O( O( 决策点区间长度 + + + 需要求解的区间长度 ) ) ),所以决策点区间与求解区间没有交集的时候,要在递归前加入二者之间的罅隙。
比如这道题就是一个很好的例子。
2021 / 11 / 15 u p d a t e \tt 2021/11/15\;update 2021/11/15update:事实上,直接模拟莫队,维护当前的 l , r l,r l,r 端点并移动即可。上面的论述已经足以说明它的复杂度是正确的。