决策单调性优化DP
概念
决策单调性是最优性 dp 的一种特殊性质,用于优化 dp 的复杂度。
在最优性 dp 中,可以转移到最优状态的状态称之为最优转移点。
决策单调性指的是最优转移点随 dp 的顺序而单调移动。
一般情况下决策单调性优化的是区间分段问题,即将原序列划分成若干段求贡献最值。
判断决策单调性可以打表或者证明贡献函数满足四边形不等式。
四边形不等式
令 表示将 划分成一段的贡献。
以求最小值为例。假设 ,如果函数 满足:
(即交叉的贡献小于等于包含的贡献)
则称函数 满足四边形不等式,即原方程具有决策单调性。
我的评价是不如打表。
常用优化
有单峰性 - 单指针优化
如果贡献函数 是单峰的,即最优决策点左侧的贡献向左递减,右侧的贡献向右递减,那么可以用单指针优化。
假设有一维护最优决策点的指针 ,由于决策单调性, 单调不减。
那么只需要一直尝试右移 ,直到贡献变劣为止。
此时由于单峰性, 一定取到最优决策点。
总复杂度是状态总数,摊下来是 转移。
贡献函数简单 - 二分队列
如果 可以很快算出( 或 ),可以用二分队列优化。
优化二维 / 通常情况 - 分治
【题解】LOJ #6384. 「是男人就过8题——Pony.ai」SignLocation
注意到最优决策点将可以转移的状态划分成两部分连续区间,考虑分治。
令 solve(l, r, L, R)
表示当前需要转移的区间是 ,可以从 中的状态转移。
那么考虑找出中点 的最优决策点 ,考虑继续分治:
solve(l, m - 1, L, p), solve(m + 1, r, p, R)
时间复杂度
二维只需要考虑对每一层进行分治即可,注意继承上一层的状态。
贡献复杂 - 分治 + 莫队
这个只能算一种技巧,但是它可以草很多东西。
有时候 会很复杂,例如子段逆序对数量一类。如果它可以用类莫队状物求,那么可以通过分治树的性质优化。
考虑维护两个指针,每次分治的时候按需跳指针。根据分治树的性质,这里的复杂度只是常数问题。
于是可以大力快乐求贡献辣!!!1
莫队,很奇妙吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】