DP思路及套路积累
多发现题目的性质,从性质上下手
dp转移可以通过更改顺序来消除一些限制
把dp转移需要的条件写进dp状态里
dp的用途是广泛的,包括计数、最优化、可行性等等,其根本就是利用记忆化避免重复计算
-
看到奇怪的限制应该考虑将其形式化,常规化
-
看到位运算类的性质可以考虑数位
dp
-
一个排列的笛卡尔树唯一,因此关于排列的若干个区间最值限制可以考虑计算笛卡尔树的形态
CF1580B Mathematics Curriculum
-
如果元素的贡献与区间最小最大值有关,那么考虑使用
min-max分治
,使每个元素在其左右端点不在同一块的地方被统计,min-max分治
不仅可以计数,也可以求最优化
P3592 [POI2015] MYJ 【最优化dp】
CF549F Yura and Developers 【计数】
-
阶梯型DP优化&pht转化的巧妙运用
P6944 [ICPC2018 WF]Gem Island
-
看到要求商最大可以先从
0/1分数规划
开始想,0/1分数规划
不一定仅限于每一个物品才会带来贡献
P3778 [APIO2017]商旅
-
dp的用途很广,甚至可以用来防止重复比较等,看到题目不会做先想dp
P6764 [APIO2020]粉刷墙壁
-
DP具有无后效性的体现:构成DP的每一步决策都只与当前的状态有关,不与前后有关,就比如说给一堆限制,然后可以将这堆限制分类,然后每一类DP,保证在符合之前所有类的限制的情况下满足当前这一类的限制,可以看做是一种分部处理“且”限制的手段
P5369 [PKUSC2018]最大前缀和
-
考虑生成一个排列的办法:状压目前使用了多少位,枚举下一步拓展谁
-
树形结构很常见,可以用来dp
SP3734 PERIODNI - Periodni
-
对于树上任意非祖先两点的都会对其
lca
产生限制,就直接按照dfs
下去即可,设计状态的时候直接就是f[i]表示以i为根的子树中,本身已经满足限制的状态
,合并的时候考虑不同子树对于根的限制即可 -
最优化dp
转移的决策(转移路径)不一定要存在直接转移,只需要保证存在最优(复合)路径就够了,就是冗余转移优化
P4762 [CERC2014]Virus synthesis
-
如果若干个集合两两之间的关系要么包含要么不交,那么集合的包含关系可以构成一棵树
CF494C Helping People
P8252 [NOI Online 2022 提高组] 讨论 【神仙lsy的集合划分树】
-
计数题要考虑如何把问题分组,做到不重不漏,比如可以考虑以最大编号或者最原始祖先来区分等等,就是类似于至少=恰好
至少这种,反正选出来的代表要具有 唯一代表性 ,即可以唯一代表一类情况,且分类重不漏
P7105 「C.E.L.U-01」门禁 【差一点想出来的题】
CF512D Fox And Travelling【自己想出来的题】
-
权值是乘在一起然后开根的,可以把开根看做在指数上除,然后就变成分数规划问题
-
dp
的有效状态实际上是很少的,可以利用上
CF1584F Strange LCS
-
如果一些情况使得某一位非常小,某一维非常大(只能接受log),那么可以考虑矩阵乘法
-
01背包的合并具有决策单调性
-
有些题目不能完全预处理,那么就可以先预处理出能预处理的,然后把不能直接预处理出来的用已经预处理的算出来,差不多就是部分预处理
P4133 [BJOI2012]最多的方案
-
计数类问题考虑加乘法原理
P5664 [CSP-S2019] Emiya 家今天的饭
-
背包问题决策具有无向性
P4095[HEOI2013]Eden 的新背包问题
正着做一次,倒着做一次,之后因为无向性就可以把正着做和倒着做的结果合并!!
-
背包问题中交换物品的顺序对结果不影响
P4141 消失之物
-
对于要求元素不重复的dp,设计状态时可以考虑一个一个的插入元素,过程类似背包
-
计数dp在设计状态的过程其实是在把情况分类的过程,要注意分类的情况之间相互不包含或重叠,以免在统计时把部分情况算重
-
在让gcd最大的问题里的一种dp的阶段性:把最大的质数作为阶段来拓展
-
多个模式串匹配且长度不定的dp可以把模式串放到AC自动机上,接着dp状态就转变成匹配到AC自动机上的某个点时的状态
-
对于dp中的序列问题,如果每个元素的贡献只与其相对的大小关系有关,那么可以把元素换成康托序,同时一个排列与康托序是一一对应的
CF1542E1 Abnormal Permutation Pairs (easy version)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库