(四边形不等式看标题可能觉得很难,其实比较简单)
四边形不等式是一种DP优化的技巧,一般针对二维DP进行优化。
在DP中,往往会有多个决策点,而其中就有一个是最优的,设 $d_{i,j}$ 的最优决策点为 $f_{i,j}$。
(以下假设DP枚举决策点的复杂度为 $O(n)$,DP状态数为 $O(n^2)$)
而四边形不等式就是说,如果满足 $f_{i,j-1} \leq f_{i,j} \leq f_{i+1,j}$,那么可以把DP枚举决策点的范围降至 $[f_{i,j-1},f_{i+1,j}]$,然后DP的复杂度就从 $O(n^3)$ 降到了 $O(n^2)$。
而这个(复杂度)怎么证明呢?我们画一下 $f$ 数组的表:
(此处,我们以 $i$ 为行号,以 $j$ 为列号,行、列号都从 $1$ 开始编号)
然后,画几个标记:
这些标记指的是,在转移 $d_{1,2}$ 的时候,转移点枚举的左右端点分别就是红箭头指向的两个数。
同时,为了方便观察,此处还画了个蓝色的虚线。
同理,还可以画出 $d_{2,3}$ 对应的标记:
以此类推:
可以发现,其实这时候所有蓝线的长度(蓝线连接的两个数字的差值定义为这个蓝线的长度)之和,最多只有 $n$。
而对于 $d_{1,3}$ 一“类”的标记:
可以发现,其实那些蓝线的长度之和也是最多只有 $n$。
在画出所有蓝线之后:
可以发现,一共就有 $n$ “类”蓝线,一“类”蓝线的长度之和最多 $n$,至此,可以证明复杂度(所有蓝线的长度之和)为 $O(n^2)$。
接下来讲几类四边形不等式解决的经典题型:
- 第一类:$d_{l,r}=\min { d_{l,k}+d_{k+1,r}
|l \leq k \leq r }+w_{l,r}$,合并石子类。 - 第二类:$d_{i,j}=\min { d_{k,j-1}+w_{k+1,i}
|0 \leq k \leq i }$,区间分割类。
(这两类对应的公式里的 $\min$ 也可以替换成 $\max$)
而一个结论就是,如果说 $w$ 同时满足以下两个条件,那么就可以直接用四边形不等式优化:
- 区间包含单调性:如果对于所有 $l \leq l’ \leq r’ \leq r$,都满足 $w_{l’,r’} \leq w_{l,r}$
- 交叉小于等于包含(四边形不等式):如果对于所有 $l \leq l’ \leq r \leq r’$,都满足 $w_{l,r}+w_{l’,r’} \leq w_{l,r’}+w_{l’,r}$
这个是可以证明的,但此处略。