决策单调性优化DP

决策单调性

决策单调性,顾名思义就是决策点具有一定的单调性,使得我们在转移的过程中不需要遍历全部的情况,而只需要在一段满足单调性的区间内寻找我们想要的最优解

有的题目甚至不算是DP题,但是也有决策单调性的性质,也归到这一类

由于博主太菜,这里面很多结论不会给出详细的证明,可能只会给出感性理解的记忆方式

建议的阅读顺序是:

  • 记住区间包含单调性,四边形不等式的定义
  • 学习决策单调性优化DP在区间类(2D1D)和1D1D DP 中的应用
  • 在看例题的同时留意四边形不等式的一些证明

四边形不等式

定义

  • 区间包含单调性

 llrr, w(l,r)w(l,r)

常见的满足区间包含单调性的有:w(l,r)=rl,前缀和等

  • 四边形不等式(交叉小于包含):

 l1l2r1r2, w(l1,r1)+w(l2,r2)w(l1,r2)+w(l2,r1)

特别的,如果等号恒成立,称w满足四边形恒等式

常见的满足四边形不等式的有:w(l,r)=(rl)2,证明如下:设abcd

     (ca)2+(db)2=a2+b2+c2+d22ac2bda2+b2+c2+d22ac2bd2a(dc)+2b(dc)=a2+b2+c2+d22ad2bc=(da)2+(cb)2

常见的满足四边形恒等式的有:w(l,r)=rl

如果已知w(l,r1)+w(l+1,r)w(l,r)+w(l+1,r1),那么可以归纳证明其满足四边形不等式

一些性质

这些性质常用来证明区间包含单调性和四边形不等式,打表观察DP状态或者w函数是否满足这个关系也是实用手段(尤其是当你不知道该怎么优化DP的时候可以猜一手)

性质1

  • 若函数w1(l,r),w2(l,r)均满足四边形不等式/区间包含单调性,则对于任意 c1,c20,函数 c1w1+c2w2 也满足四边形不等式/区间包含单调性。

性质2

  • 若函数w(l,r)=f(r)g(l),则函数 w 满足四边形恒等式。当函数 f,g 单调增加时,函数w 还满足区间包含单调性。

性质3

  • h(x) 是一个单调增加的凸函数,若函数w(l,r)满足四边形不等式和区间包含单调性,则复合函数 h(w(l,r)) 也满足四边形不等式和区间包含单调性。

性质4

  • h(x) 是一个凸函数,若函数w(l,r)满足四边形不等式和区间包含单调性,则复合函数 h(w(l,r)) 也满足四边形不等式。

以上性质会在例题的证明中被提到

决策单调性优化DP

决策单调性能够优化的DP主要有以下两类:

区间类(2D1D)动态规划

(2D1D指状数O(n2),转移有O(n)中情况)

形如:

f [l,r]minlk<r{f [l,k]+f [k+1,r]}+w(l,r)

引理:若w(l,r)满足区间包含单调性和四边形不等式,则状态f[l,r]满足四边形不等式

定理:记g[l,r]f[l,r]的最小的 最优决策点,那么

g[l,r1]g[l,r]g[l+1,r]

也就是说,我们在区间类DP的时候顺便记录下转移点,对于当前状态f[l,r],我们可以确定它的可能的最优解一定在[ g[l,r1],g[l+1,r] ]这个区间内,对决策点的总枚举两降到O(n2)

for (int len = 2; len <= n; ++len) // 枚举区间长度
for (int l = 1, r = len; r <= n; ++l, ++r) {
// 枚举长度为len的所有区间
f[l][r] = INF;
for (int k = g[l][r - 1]; k <= g[l + 1][r]; ++k)
if (f[l][r] > f[l][k] + f[k + 1][r] + w(l, r)) {
f[l][r] = f[l][k] + f[k + 1][r] + w(l, r); // 更新状态值
g[l][r] = k; // 更新(最小)最优决策点
}
}

例题

  • HDU3480 Division,四边形不等式的证明见上
  • P4767 [IOI2000]邮局w(l,r)[l,r]之间建一个邮局的最小距离,显然取中位数最优,可以证明其满足四边形不等式(我不会证)

1D1D 动态规划

形如:

f[i]minj=1i1{f[j]+w(j,i)}

定理:若w(l,r)满足四边形不等式,记g[i]表示i的最小最优决策点,那么

r1r2,g[r1]g[r2]

另一种形式(严格弱化版)

形如:

f[i]=minj=1i1{w(j,i)}

因为决策单调性只限制了下界,并没有限制上界,所以复杂度依然是O(n2)的。

所以我们要想办法限制上界

考虑暴力O(n)找出中点mid的最优转移点,那么对于[l,mid1]的点,我们有了一个上界,对于[mid+1,r]的点,我们有了新的下界

这是一个分治问题,递归下去处理即可

例题

以Lightning Conductor为例使用四边形不等式相关性质证明四边形不等式

对于所有的pi,求maxj=1n{aj+|ij|}ai

首先将绝对值去掉,变成max(maxj=1i{aj+ij},maxj=i+1n{aj+ji})ai,两部分处理方式完全一致,直接reverse之后再做一遍即可

把所有数取反,把max变成minminj=1i{ajij}

由性质4:w(l,r)=rl,满足四边形恒等式和区间包含单调性,x是凸函数,所以复合函数w2(j,i)=ij满足四边形不等式

由性质1:w1(j,i)=aj,满足四边形恒等式,则原函数=w1(j,i)+w2(j,i),满足四边形不等式,得证

剩下的就分治即可,时间复杂度O(nlogn)

回到原问题

由于决策的单调性,我们可以将1n划分成若干区间,表示这个区间内的DP值转移自哪里。

我们可以用单调队列维护。单调队列里的元素记录三个信息:l,r,p,表示当前状态下(考虑了前i个元素),p是区间[l,r]内的最优决策点。如果队首的r<当前的i,弹出无用的队首。插入队尾时,依次和队尾元素比较,如果fiflfpfl更优,那么p在任何状态下都不会比i更优,弹出队尾;否则将一段后缀分成两个部分,分界线用二分的方式找到。

时间复杂度O(nlogn)

例题

另一种形式

f [i,j]minkj{f [i1,k]+w(k+1,j)}

实际上是分层的 1D1D DP。我们有类似的结论

引理:若w(l,r)满足区间包含单调性和四边形不等式,则状态f[l,r]满足四边形不等式

定理:记g[l,r]f[l,r]的最小的 最优决策点,那么

g[l,r1]g[l,r]g[l,r+1]

感性理解:因为有区间包含单调性,我们把一个区间的贡献拆成多个肯定不会更劣,这样我们得到了下界,同时减少一个元素贡献也不会变劣,得到上界

posted @   harryzhr  阅读(601)  评论(3编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示