决策单调性乱记

Cmd 博客

首先四边形不等式 \(w(a,c)+w(b,d)\leq w(a,d)+w(b,c)\)。如果是最大化问题,等号可以反过来。

你可以简单把它理解为交叉优于包含。

这种不等式有一种常用的证明方法:考虑区间 \([a,c]\)\([b,c]\) 的贡献和,然后再考虑从中选一个区间加入 \((c,d]\) 的贡献增量。注意前者是包含后者的,如果加入一个新的区间的贡献时,加入小的区间的贡献增量比加入大的区间的贡献增量更优,即证明四边形不等式。

举个例子:区间不同数字个数,发现 \([a,c]\)\([b,c]\) 多了一些数字,所以再加入一段区间时更容易覆盖掉一些贡献,所以 \(w(a,c)+w(b,d)\leq w(a,d)+w(b,c)\)

再比如区间虚树大小,原有的虚树大小越大,新加入一些点造成的增量越小。(跟凸性质很像,所以 DP 优化真的是相通的)。

四边形不等式如果满足区间包含单调性,即 \(w(a,d)\leq w(b,c)\) 的话,那么可以对于区间 DP \(f(l,r)=\min_{k\in [l,r]} f(l,k)+f(k+1,r)+w(l,r)\) 进行一些优化。

具体来讲大概是最优决策点 \(p(l,r-1) \leq p(l,r)\leq p(l+1,r)\) 于是优化到 \(O(n^2)\),不会证,也不是我们讨论的重点。

我们今天遇到的 DP 大概是这样的 \(f(i)=\min_{j<i} g(j)+w(j,i)\)\(w\) 满足四边形不等式。这样的 DP 可能进行多轮。

这个东西具有决策单调性,证明:

设决策点 \(A\leq B\leq C\leq D\),如果 \(C\) 的最优决策点 \(p(C)=B\),那么需要证明 \(p(D)\geq B\)

\(p(D)=A\),那么由于 \(p(C)=B\),有 \(f(B)+w(B,C)\leq f(A)+w(A,C)\)

应用四边形不等式 \(w(A,C)+w(B,D)\leq w(A,D)+w(B,C)\),即 \(w(B,D)-w(B,C)\leq w(A,D)-w(A,C)\)

与上式同向相加,有 \(f(B)+w(B,D)\leq f(A)+w(A,D)\),即 \(B\)\(A\) 更优。

这样说明决策点 \(p\) 是单调的。

于是对于这样的 DP 可以直接分治优化,solve(l,r,vl,vr) 表示 \(\forall x\in [l,r],p(x)\in [vl,vr]\),暴力扫描区间内所有决策点求出 \(p(mid)\) 分治下去即可 \(O(n\log n)\)

经典应用:对于一个数列,把它分成 \(k\) 段,使得 \(w(l,r)\) 之和最大/最小化。分层跑 \(k\) 遍分治即可。\(O(nk\log n)\)

\(w(l,r)\) 分别为区间不同数字个数、相同数字对数、虚树大小、逆序对个数。直接四倍经验。

\(w(l,r)\) 比较难求时可以莫队暴力移动指针,只要不移出当前层复杂度就是对的。

但 Cmd 博客里讲了另一种 \(O(n^2+nk)\) 的方法,\(n\) 较小时跑得很快。

\(f_k\) 表示分成 \(k\) 段的 DP 数组,\(p_k\) 同理。

\(p_{k-1}(n)\leq p_k(n) \leq p_k(n+1)\)。后面的不等式就是决策单调性,前面的也可以用决策单调性证明。

具体可以看 Cmd 博客里的图,大的拱落脚点再小的拱前面。

于是按 \(k\) 从小到大,\(n\) 从大到小的顺序扫描,暴力遍历合法区间。

这样的复杂度可以考虑 \(p\) 矩形,每一次相当于遍历对角线上的区间,整条对角线的区间长度之和时 \(O(n)\) 的,共 \(O(n+k)\) 条,复杂度得证。

posted @ 2022-10-28 11:36  yyyyxh  阅读(62)  评论(0编辑  收藏  举报