四边形不等式与决策单调性

参考资料

在线决策单调性地皮还能单老哥分治做?(还没看)
四边形不等式和决策单调性还需学习补充后面的第三类dp。
Note - 决策单调性
四边形不等式优化DP
这里有题做
待看

知识点

以下均讨论 \(min\) 的情况,若是 \(max\),则不等号方向应取反。

四边形不等式

有一个计算价值的函数 \(w\),若 \(\forall a\le b\le c\le d\),都有:

\[w(a,c)+w(b,d)\le w(a,d)+w(c,d) \]

则称,\(w\) 满足四边形不等式,若等号恒成立,则称 \(w\) 满足四边形恒等式。一般简记为 交叉小于包含。
还有另一种定义 \(w(a,b)+w(a+1,b+1)\le w(a+1,b)+w(a,b+1)\),有时候证明可以考虑用该定义。
补充一下,若 \(w(b,c)\le w(a,d)\) 则称 \(w\) 满足单调性。

一些定理:

  1. 若 \(w(i,j)\) 满足四边形不等式,则 \(W(i,j)=w(i,j)+f(i)+g(j)\) 也满足四边形不等式。

    证明

    在 \(w(a,c)+w(b,d)\le w(a,d)+w(b,c)\) 两边同时加上 \(f(a)+f(b)+g(c)+g(d)\) 即可得到相应的关于 \(W\) 的四边形不等式 。

  2. 若 \(w(l,r)=\sum_{l\le i\le j\le r} c_{i,j}\) 且 \(c_{i,j}\ge0\),则 \(w\) 满足四边形不等式。

    证明

    如图所示,显然。
    image

  3. 若 \(f\) 和 \(w\) 都满足四边形不等式,那么 \(g=f+w\) 也满足四边形不等式。这很显然。

决策单调性

若 \(dp_i\) 由 \(dp_j\) 转移而来,则称 \(j\) 是 \(i\) 的最优决策点,记作 \(opt_i\),若 \(i\) 单调递增,\(opt_i\) 也单调递增,那么 \(dp\) 具有决策单调性。
我进行最原始的定义,在形如 \(dp_i=\min_{1\le j<i} w(j,i)\),若 \(w(j,i)\) 满足四边形不等式,那么 \(dp_i\) 具有决策单调性。设 \(i'<i<j<j'\),若 \(dp_j\) 由 \(dp_i\) 转移来,则 \(dp_{j'}\) 也从 \(dp_i\) 转移来。才用反证法:
假设 \(dp_{j'}\) 由 \(dp_{i'}\) 转移来,那么就会有 \(w(i,j')\ge w(i',j')\),又有 \(w(i',j)\ge w(i,j)\),所以合并一下 \(w(i,j')+w(i',j)\ge w(i',j')+w(i,j)\),交叉大于包含了,矛盾。

经典模型

一般来说,根据 \(w(i,j)\) 的性质选择转移优化策略,主要分为以下几种情况:

  1. 直接计算/预处理
    若 \(w(i,j)\) 能直接 \(O(1)\) 求得或者预处理得到,则直接利用该代价进行转移即可,这是最理想的情况。

  2. 移动访问(类莫队)
    若 \(w(i,j)\) 无法直接求出,但能通过相邻状态 \(w(i \pm 1, j)\) 或 \(w(i, j \pm 1)\) 在 \(O(1)\) 时间内递推得到,则可以像莫队一样动态维护当前区间,通过移动左右指针来 \(O(1)\) 获取当前代价。

  3. 动态计算(顺序依赖)
    若 \(w(i,j)\) 的计算依赖于已经求出的 \(f_{1 \sim i}\),此时无法预先算出所有代价,只能按照 \(i\) 的递增顺序顺次计算 \(f\) 与对应的 \(w\)。

需要注意的是,上述第 2 种与第 3 种性质并不互斥,在实际问题中可能同时出现,需要结合具体情况灵活处理。

1d1d

\[f_i=\min_{1\le j<i} f_j+w(j,i) \]

若 \(w\) 满足四边形不等式,则根据定理1,可得 \(F_{j,i}=f_j+w(j,i)\) 满足四边形不等式,再根据上文决策单调性定义,得到 \(dp\) 具有决策单调性。
以下介绍几种常见的解决算法。

分治

写一个函数 \(solve(l,r,lt,rt)\) 定义为考虑 \([l,r]\),目前决策单调区间在 \([lt,rt]\),从 \(lt\) 扫到 \(rt\),算出 \(mid\) 的决策点 \(opt\),分成 \(solve(l,mid-1,lt,opt)\) 和 \(solve(mid+1,r,opt,rt)\) 递归下去做,复杂度 \(O(n \log_2 n)\)。

二分队列

维护一个队列,每个元素为三元组 \((j, l, r)\),表示决策点 \(j\) 对所有尚未处理的下标 \(t \in [l, r]\) 最优(由于决策单调性,该区间连续且互不重叠)。

算法流程(按 \(i = 1 \to n\) 顺序计算 \(f(i)\)):

  1. 清理队首:若队首元素的 \(r < i\),则弹出队首(该决策点已无效)。
  2. 获取决策:当前队首的 \(j\) 即为 \(f(i)\) 的最优决策点(因为队首是当前区间覆盖 \(i\) 的决策)。
  3. 尝试插入新决策点 \(i\):
    • 从队尾开始,若在队尾元素的左端点 \(l\) 处,新决策点 \(i\) 比原决策点 \(j\) 更优,则弹出队尾,重复此操作。
    • 若队尾非空,则在其区间 \([l, r]\) 内二分查找最小的位置 \(k\),使得对于所有 \(t \ge k\),决策点 \(i\) 优于原决策点 \(j\);将队尾的右端点改为 \(k\),并在队尾插入新元素 \((i, k+1, n)\)(若 \(k < n\))。
    • 若队尾为空,直接插入 \((i, i+1, n)\)。

复杂度:\(O(n \log n)\),但实现细节较多,且无法与“莫队式”动态维护 \(w\) 的方法结合使用(因为需要随机访问区间端点处的代价)。

区间DP

\[f_{l,r}=\min_{l\le i\le r-1} f_{l,i}+f_{i+1,r}+w(l,r) \]

运用一个定理:若 \(w\) 满足四边形不等式且满足单调性,则 \(f\) 也满足四边形不等式。(还不会证)
类似的,定义 \(opt_{l,r}\) 为 \(dp_{l,r}\) 的最优决策点。设 \(F(l,r)=f_{l,i}+f_{i+1,r}+w(l,r)\),根据定理3可以得到 \(F\) 也满足四边形不等式,那么固定长度,即可得到与上文类似的决策单调性,推广一下,得到 \(opt_{l,r-1}\le opt_{l,r}\le opt_{l+1,r}\),于是我们在转移时,只需枚举 \(i\in[opt_{l,r-1},opt_{l+1,r}]\)。时间复杂度:\(O(n^3)\rightarrow O(n^2)\)

理解 & Trick & 易错点

  1. 很多时候 \(w\) 是否满足四边形不等式是挺难证的,但是我们可以猜结论。 \hanx

  2. 可以带入定义二去证明四边形不等式。

  3. 其实考场上更常用的用代码去验证,即

for(int i=1;i<n;++i)
   for(int j=i;j<n;++j)
     assert(w(i,j)+w(i+1,j+1)<=w(i,j+1)+w(i+1,j));
  1. 很多时候上面的定理都是靠记,OI中的很多东西不需要去证明。\doge

题目

UVA10304 Optimal Binary Search Tree
SP15736 BRKSTRNG - Breaking String

posted @ 2026-07-27 08:42  lcx_OIer  阅读(22)  评论(1)    收藏  举报