决策单调优化动态规划

四边形不等式

决策单调

即对于dp方程f[i]=min/max(f[j]+w(j+1,i)),设f[i]pre[i]转移,有 i>j,pre[i]pre[j]

写出pre[]就是大概这种效果:

111111224444444446666

可以观察到决策单增,那么对于有序表,可以想到利用二分或分治等O(logn)的算法来优化转移,从而达到O(nlogn)的时间复杂度

一个重要的证明决策单调的方法就是四边形不等式

(当然,考场上可以感性分析或打个表)

二分+栈

由于决策单调,故相同决策点都是相连的,可以通过二分+栈来维护这些区间

我们反向考虑:分析一个点i最多能更新到那些点,顺序枚举i

那么就在二分找第一个从i转移能够最优的点,往后的区间都是以i转移为优

当然,如果区间i完全覆盖了前面的某个区间j(在j左端点仍是决策i更优),就从栈中弹出j

注意:这种方法要求转移要高效,即w(j,i)要支持预处理或本身较快

分治

挺新的思路

由于决策单调,pre[i]i单调而单调,用类二分的思路

Solve(l,r,sl,sr,k)为划分第k段,当前处理f[l]~f[r],它们可能从f[sl]~f[sr]转移

取区间mid,如果f[mid]f[sm]转移,那么f[l]~f[mid]就是从f[sl]~f[sm]转移,f[mid]~f[r]就是从f[sm]~f[sr]转移

出现子问题,支持分治

分治的一个优势在于:贡献区间连续(从[sl,sr][sl,sm][sm,sr]),这意味着即使贡献难以预处理,也可以通过莫队优化,使得贡献计算时间正确

posted @   Zhone_lb  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示