DP练习
做题。太菜了只会一些水的qwq。
1. P5020 [NOIP2018 提高组] 货币系统
就是从给的一组基里面去掉几个,使得剩下的线性无关。
直接完全背包跑一遍,如果一个数能被多于一种方案表示出来(除了自己表示自己),那么就可以去掉。
2. P1131 [ZJOI2007] 时态同步
不像DP。
先跑一遍算每个终止结点的时间。然后观察到给一个结点与父亲的连边
于是就处理出每个子树内的最大值,然后计算当前根节点统一时态到最大值的代价。DFS一遍统计就行。
3. P3572 [POI2014] PTA-Little Bird
定义
容易写出转移
比一般的单调队列优化的形式多了个艾弗森括号。但其实问题不大,因为括号前系数为
-
艾弗森括号为
,此时一定为最小。 -
艾弗森括号为
,此时可能比 相同的大 ,不大于次大值。
于是
4. P5322 [BJOI2019] 排兵布阵
将每一列视作一个泛化物品,给第
定义
于是容易写出转移
5. P3174 [HAOI2009] 毛毛虫
找最大毛毛虫。
考虑从一个点开始往下找,钦定当前点不能往周围拓展一条边的最大毛毛虫
细节比较多,注意当前点实际上可以向父亲拓展,但钦定的时候排除了这个情况。注意可能没有儿子或者只有一个儿子的情况。总之注意细节。
6. P3188 [HNOI2007] 梦幻岛宝珠
超大背包。考虑泛化物品。
注意到
而
我们按物品次序搞这个东西,钦定求
于是做完了,复杂度懒得分析,
感觉这种就是要找点性质让超大的物品可以用一种状态高效表示出来。
7. P2519 [HAOI2011] problem a
首先可以将给出的限制转化成一段区间内的人的分数相同,可以发现合法的方案是选择一些不相交区间。
然后发现要求最少说假话的人,这里面有些区间不存在,一定是假话。
可以考虑补集转化,来求最多说真话的人,那么就不用考虑上面的东西。
发现对于一段区间,说真话的人数为
那么将上面那坨东西视作区间的权值,那么问题就是选出一些不相交区间使得权值和最大,答案为
于是有朴素DP,首先按
这里已经可以二分出最大的
瓶颈在于排序,
8. P6564 [POI2007] 堆积木KLO
首先状态很妙。一开始可以想到朴素的二维状态,有很多种定义方式,最后都指向了同一种方程,形如
把艾弗森括号先不管,放到二维平面上转化为平行四边形中最值,再拉伸一下平面就转化为二维前缀最值,然后加上艾弗森括号就上扫描线或者树套树解决。
更为妙的状态还是一维的,定义
这个转移的限制是个三维偏序,不太好,但是观察一下,发现当
整理一下式子,限制就是
9. P3205 [HNOI2010] 合唱队
发现每次插入一个人只会在头和尾插,然后考虑从终态推回来,可以自然想到要知道当前最后一个人是在头还是在尾。于是记到状态里。这种在首尾每次增减一处的题型是经典的区间DP的样子。
设状态
答案就是对于最终队形中的
如何转移?大力分讨,去掉最后一个人后,讨论倒数第二个人在剩下队形的首/尾,相加即可。
这样区间DP是
10. P2606 [ZJOI2010] 排列计数
神奇转化。
首先将限制反过来,
在一个小根堆中,根节点肯定确定了是最小的一个数。这道题中小根堆的结构也是确定的,那么左右子树的大小也是确定的。设当前子树中一共要放
那么方程是很简单的:
然后DFS一遍就做完了。
11. P4310 绝世好题
看到二进制,想到拆位。限制可以转化为二进制下同为
定义
那么可以考虑维护第
12. P1282 多米诺骨牌
首先来说自己的做法。首先考虑求出所有能得到的上方数值的和,那么直接扫一遍就能得到最小的差值。为求这个最小的差值,首先原样不动,得到初始数值,然后一次旋转可以造成一定贡献,一个贡献只能得到一次,于是做背包就可以得到所有可以得到的和。接着发现要求的是最小旋转次数,那么可以记下在取得最小差值时上方数值之和,注意有两个值,即
更为简单的做法是,定义
13. P2943 [USACO09MAR] Cleaning Up G
很牛的东西。
朴素DP是简单的:
首先分析答案上界,发现答案不超过
然后就有
14. P5785 [SDOI2012] 任务安排
费用提前计算的思想。
定义
朴素DP式子:
15. P2051 [AHOI2009] 中国象棋
状态比较妙。
首先棋盘上DP,考虑以行为阶段。尝试在当前这一行中填入炮,由于至多填两个,转移是
但是发现往这一行中填的炮受到以前填过的炮所在列的影响,于是在状态中记录还有多少个可用的列。
定义状态
16. P2396 yyy loves Maths VII
卡常题。
状压不是难点。发现要算每种二进制状态对应的数值,但是如果把这部分单独来算就因常数过大寄了。
技巧是递推这个值,每次把状态的
17. P3349 [ZJOI2016] 小星星
容斥计数,子集反演,状压。
首先看到是把一棵树放到一张图上,点数很少,先上树上状压DP。定义
发现
转移是简单的:
开始容斥,现在我们可以得到用
使用子集反演的力量,
18. P1291 [SHOI2002] 百事世界杯之旅
简单题,但是我的□□更胜一筹。
定义
19. P2193 HXY和序列
序列计数,典and水。
设
转移是简单的,
可以滚掉第一维。记得及时清空。
有数学做法,没推。
20. P2467 [SDOI2010] 地精部落
排列计数,规约(或者排列里特殊的“离散化”)。
套路起手,定义
如何转移?考虑去掉最后的
考虑把前面的数离散化(即
此刻
发现转移是前缀后缀和的形式,直接优化。并且第一维可以压掉。
21. P2401 不等数列
欧拉数板子,但是
设
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】