Loading

决策单调性优化DP

概念

决策单调性是最优性 dp 的一种特殊性质,用于优化 dp 的复杂度。

在最优性 dp 中,可以转移到最优状态的状态称之为最优转移点。

决策单调性指的是最优转移点随 dp 的顺序而单调移动。

一般情况下决策单调性优化的是区间分段问题,即将原序列划分成若干段求贡献最值。

判断决策单调性可以打表或者证明贡献函数满足四边形不等式。

四边形不等式

\(c(l, r)\) 表示将 \([l, r]\) 划分成一段的贡献。

以求最小值为例。假设 \(1 \leq p1 \leq p2 \leq p3 \leq p4 \leq n\),如果函数 \(c\) 满足:

\(c(p1, p3) + c(p2, p4) \leq c(p1, p4) + c(p2, p3)\)

(即交叉的贡献小于等于包含的贡献)

则称函数 \(c\) 满足四边形不等式,即原方程具有决策单调性。

我的评价是不如打表。

常用优化

有单峰性 - 单指针优化

如果贡献函数 \(c\) 是单峰的,即最优决策点左侧的贡献向左递减,右侧的贡献向右递减,那么可以用单指针优化。

假设有一维护最优决策点的指针 \(p\),由于决策单调性,\(p\) 单调不减。

那么只需要一直尝试右移 \(p\),直到贡献变劣为止。

此时由于单峰性,\(p\) 一定取到最优决策点。

总复杂度是状态总数,摊下来是 \(O(1)\) 转移。

贡献函数简单 - 二分队列

如果 \(c\) 可以很快算出(\(O(1)\)\(O(\log)\)),可以用二分队列优化。

具体见 【题解】P1912 [NOI2009] 诗人小G

优化二维 / 通常情况 - 分治

【题解】LOJ #6384. 「是男人就过8题——Pony.ai」SignLocation

注意到最优决策点将可以转移的状态划分成两部分连续区间,考虑分治。

solve(l, r, L, R) 表示当前需要转移的区间是 \([l, r]\),可以从 \([L, R]\) 中的状态转移。

那么考虑找出中点 \(m\) 的最优决策点 \(p\),考虑继续分治:

solve(l, m - 1, L, p), solve(m + 1, r, p, R)

时间复杂度 \(O(n \log n)\)

二维只需要考虑对每一层进行分治即可,注意继承上一层的状态。

贡献复杂 - 分治 + 莫队

【题解】P5574 [CmdOI2019]任务分配问题

这个只能算一种技巧,但是它可以草很多东西。

有时候 \(c\) 会很复杂,例如子段逆序对数量一类。如果它可以用类莫队状物求,那么可以通过分治树的性质优化。

考虑维护两个指针,每次分治的时候按需跳指针。根据分治树的性质,这里的复杂度只是常数问题。

于是可以大力快乐求贡献辣!!!1

莫队,很奇妙吧

posted @ 2022-12-31 12:01  kymru  阅读(216)  评论(0编辑  收藏  举报