[复习资料]关于最优化类 dp 的优化

关于最优化类 dp 的优化

复习一下三种最优化类 dp 的优化方式。

决策单调性优化

普通类型

在序列上面的 dp ,设最优决策点依次为 \(g_{1,\dots,n}\) ,如果满足 \(g_i\le g_{i+1}\) ,那么可以以此优化 dp 的转移。

具体实现两种方式(均为 \(\mathcal O(n\log_2n)\) ):

  • 如果现在需要求出来的 dp 值和之前需要求出来的 dp 值没有关系,可以使用分治的方法。
  • 如果现在需要求出来的 dp 值和之前需要求出来的 dp 值有关系,可以使用维护最优决策点相同的一段的方法。

四边形不等式

在区间上面的 dp ,转移方程如果是类似这样的:

\[dp(l,r)=\min_{k=l}^{r-1}(dp(l,k)+dp(k+1,r))+\operatorname{val}(l,r) \]

\(g(l,r)\) 表示最优决策点,如果满足(四边形不等式):

\[\operatorname{val}(l,r)+\operatorname{val}(l-1,r+1)\le \operatorname{val}(l,r+1)+\operatorname{val}(l-1,r) \]

可以通过下图简易记忆(认为 \(\operatorname{val}(l,r)\)\(l\)\(r\) 之间的距离):

那么有 \(g(l,r-1)\le g(l,r)\le g(l+1,r)\) ,由此减小枚举量。

斜率优化

两种可以斜率优化的情况:

  • 式子可以转化为最优化两点间直线的截距。
  • 式子可以转化为最优化两点间直线的斜率。

使用数据结构维护凸包。

下面的表格是第一种斜率优化时针对题目特点用到的数据结构。

加入点的某一维度单调 加入点的两维都不单调
查询的斜率单调 单调队列/单调栈+直接弹掉 平衡树+二分
查询的斜率不单调 单调队列/单调栈+二分 平衡树+二分

带权二分

给定一个上/下凸函数,可以求出这个函数加上一个正比例函数时的函数值取到最大/小值的点,求某个位置的函数值。

二分正比例函数的斜率,根据求出的最值点来判断斜率需要变大还是变小。

往往可以把 dp 时需要记录的一维优化成一个 \(\log_2\)

一般可以用费用流求解的问题都是凸函数。

posted @ 2023-05-14 10:19  xiaolilsq  阅读(67)  评论(0编辑  收藏  举报