闫式DP分析法

闫式DP分析法

闫式DP分析法的核心思想是从集合的角度来分析DP问题。

所有的DP问题都可以使用闫式DP分析法进行分析。(经过70道题目验证通过)

1.选择DP问题:背包模型
2.序列DP问题
3.状态压缩问题
4.状态机问题
5.树形DP问题
6.区间DP问题
7.斜率优化问题

我们可以把做过的所有DP问题都看作是有限集上的最值问题。

DP问题 == 有限集上的最值问题

然而,由于这个有限集的数量级很高(通常是指数级别的),
所以肯定不能暴力地进行枚举,时间复杂度会过高。则需要使用DP来进行优化,DP的两个阶段:

1.化零为整,寻找共性——状态表示

所谓 化零为整 是指我们对于零星的情况,不是一个一个去枚举,
而是每次根据这些零星的情况的某些特性去枚举一类情况(即一个子集)
f(i)需要考虑的问题:
表示的是一个怎样的集合?
f(i)保存的值是什么意思(max/min/count/…)?与集合有什么关系?

2.化整为零,寻找不同——状态计算

如何去求f(i)呢?
我们要把它们划分成若干个不同的子集来求,每一个子集分别去求。需要满足的条件有:

不重复(可以不满足,例如求min,max。但是求count的时候,就不能重复)
不遗漏
例如,我们假设f(i)表示的是某个集合的最大值,那么可以每个子集的最大值的最大值。

那么问题来了,怎么进行集合f(i)的划分呢?
寻找最后一个不同点。

注意:

DP的优化是在DP的朴素分析完成之后才进行的。所以得先想好朴素分析,不要急于求成;
DP问题的所有优化都是对代码做等价变形;

摘自 https://blog.csdn.net/yc_cy1999/article/details/106106912

posted @   Diamondan  阅读(153)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示