决策单调性优化 DP 学习笔记

· · 个人记录

声明:全文讨论 \minw(a,d)+w(b,c)\ge w(a,c)+w(b,d) 等情况,具体应用请自行更换 \le, \ge 符号。

四边形不等式

w(i,j) 为定义在整数域上的二元函数,若对于任意 a\le b\le c\le d 都满足 w(a,d)+w(b,c)\ge w(a,c)+w(b,d) (即 交叉 \le 包含),则称 w 满足 四边形不等式

定理:w 同上。若满足对于所有 a<b,都有 w(a,b+1)+w(a+1,b)\geq w(a,b)+w(a+1,b+1),则 w 满足四边形不等式。

证明: 懒得证了咕咕咕。会用就行,感性理解一下就是对的吧。

决策单调性

最优化 DP 就是说每一个状态只能由一个最优的状态转移来,那么我们称这个最优的状态为 最优决策点

决策单调性 就是说当 DP 顺次进行时(本质就是一个 DAG),最优决策点单调变化(单调 不降)。

假设有转移方程 f_i=\min(f_{j}+w(j,i))(构造出来具体的问题还挺容易的?),如果 w 没有任何性质的话那肯定只能暴力 DP,但是如果 w 满足上面所讲的四边形不等式呢?

猜想此时 f 满足决策单调性(事实确实如此)。用反证法,设 p_i 表示 f_i 的最优转移点,假设 f 没有决策单调性,即存在 x<yp_x>p_y

根据最优决策点的定义可知:

f_y=f_{p_y}+w(p_y,y)\le f_{p_x}+w(p_x,y)

因为 w 有四边形不等式性质,所以对于 p_y<p_x<x<y 可知:

w(p_y,y)+w(p_x,x)\ge w(p_y,x)+w(p_x,y)

上下两式大大小小同时相加可得:

f_{p_y}+w(p_y,y)+w(p_y,x)+w(p_x,y)\le f_{p_x}+w(p_x,y)+w(p_y,y)+w(p_x,x)

即:

f_{p_y}+w(p_y,x)\le f_{p_x}+w(p_x,x)=f(x)

显然,这与 p_x 的最优性矛盾,故假设不成立,即 f 具有 决策单调性

这样四边形不等式的定理作用就体现出来了,它可以帮助我们证明 w 函数的四边形不等式性质,具体判断方法见例题。

应用 & 技巧

前面讲过了,设 p_i 表示 f_i 的最优决策点,那么 p_i 单调不降,下面是处理决策单调性题目的两种方法(感觉 Sol.2 比 Sol.1 好写不止一点点)。

Sol. 1:单调队列

用单调队列维护 p

当求出一个 f_i 时,检查 i 可以作为哪些 j 的最优决策点(i<j),就是要维护这样一个东西(借用一下 @Flash_Hu 的图):

具体来说,就是一些三元组 (l,r,j) 表示 p[l\sim r] 的最优决策点都是 j,这个东西用单调队列维护,具体操作如下:

时间复杂度 \mathcal{O}(n\log n)

Sol. 2 分治

非常好算法,英雄联盟,爱来自瓷器(真的非常非常好写)。

假设我们知道对于 a[l\sim r] 的最优决策点在 [L,R] 范围内。设 m=\lfloor\frac{l+r}{2}\rfloora[l\sim m] 的最优决策点为 p。那么 a[m+1\sim R] 的最优决策点肯定在 [p,R] 中。

分治搞定,时间复杂度 \mathcal{O}(n\log n)

例题

P3515 [POI2011]Lightning Conductor

推式子,p\geq a_j-a_i+\sqrt{|i-j|}。设 f_i=\max{a_j+\sqrt{|i-j|}},答案为 f_i-a_i。因为绝对值不好搞,序列正反做两次取最大值即可去掉绝对值。

剩下板子了。Sol. 1 的代码。Sol. 2 的代码。

P4767 [IOI2000]邮局

先排序。设 f_{i,j} 表示前 i 个位置放 j 个邮局的最小代价,w(i,j) 表示 i\sim j 放一个邮局最小值。转移:

f_{i,j}=\min\{f_{k,j-1}+w(k+1,j)\} [**P5574 [CmdOI2019]任务分配问题**](https://www.luogu.com.cn/problem/P5574) [题解](https://www.luogu.com.cn/blog/Jerry-Jiang/solution-p5574)。 # 参考资料 + [command_block 的 **DP的决策单调性优化总结**](https://www.luogu.com.cn/blog/command-block/dp-di-jue-ce-dan-diao-xing-you-hua-zong-jie) + [Yuzuriha_Inori 的 **决策单调性优化DP学习笔记**](https://www.luogu.com.cn/blog/zxyer/solution-p3515) + [Alex_Wei 的 **DP 优化方法大杂烩 II**](https://www.cnblogs.com/alex-wei/p/DP_optimization_method_II.html) + [Flash_Hu 的 **P3515 题解**](https://www.luogu.com.cn/blog/flashblog/solution-p3515)