2024-3月 DP 总结
换根 DP
- 换根 DP,又称二次扫描,一般用于求解无根树问题。大多数时候将
次 dfs 简化为 次从而优化算法。
经典套路:
指定某个节点为根节点(一般为 )。
第一次搜索完成预处理,同时得到该节点的解。
第二次搜索进行换根 DP,由已知节点推出相邻节点。
具体地,设
例题1 P3478 [POI2008] STA-Station
【题意】
给出一棵树,找出一个点来,使得以这个点为根时所有点的深度之和最大。
【解析】
设
第二次 dfs,考虑设
答案为
例题2 CF1156D 0-1-Tree
可以左转我的题解。
斜率优化 DP
-
斜率优化,一般是在转移方程中当前为
,枚举决策点 ,然后化简式子出现同时与 和 有关的项(如果没有可以单调队列)。这样的话有点像一次函数,形如 ,那么这里的 就是与 和 有关的项(具体题目具体分析)。问题变成查询最有决策点。 -
如果式子中的
与 都有单调性,可以使用单调队列线性维护。否则有两种做法:维护凸壳并二分或李超树(也可以平衡树或 cdq 分治,但我不会,就不弄巧成拙了)。这些做法是带一个 log 的。
经典套路:
写出朴素转移方程。
化简并设出 ,根据所求决定维护上凸还是下凸(最大值还是最小值)。
看单调性决定维护方式。
例题1 P3195 [HNOI2008] 玩具装箱
【题意】
给定一个序列,要求将其划分成若干段,一段划分为
【解析】
朴素的转移方程为:(设
换元并化简,设
先不管取
我们发现,如果设
观察数据,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步