面向tg选手的DP练习题 笔记
0. 题单链接
1. P4310 绝世好题
做题心得
有二进制考虑拆位。
转移和二进制有关,故考虑用二进制的每一位设计状态转移方程。
设
答案为
时间复杂度
2. P1944 最长括号匹配
这题和 DP 有关系吗。
用一个栈处理,设
时间复杂度
3. P1772 [ZJOI2006] 物流运输
做题心得
问题复杂时,从简单入手,考虑特殊情况。
数据范围很小,考虑乱搞。
设
这一部分时间复杂度
接着考虑
答案为
整体时间复杂度
4. P1284 三角形牧场
做题心得
可以通过已知信息优化状态数。
校内 OJ 有一题三个杯子互相倒水,就是用
同理,设
显然 MLE,但是由于每一条边都要用上,所以我们可以省略掉一维,用总和减两边得到第三边长,变为
5. P4158 [SCOI2009] 粉刷匠
做题心得
问题复杂时,先考虑部分,再考虑整体。
设
设
需要注意的是,一次最少涂一格,所以
答案为
整体时间复杂度
6. P1156 垃圾陷阱
巨大坑点:一个时间点可以存在多个垃圾。
设
设
则先把上一时刻的状态转移过来:
然后处理吃掉当前垃圾的情况:
然后处理用当前垃圾来垫高的情况:
最后滚动数组合并:
找答案:
如果能垫上去,那么答案就是出现
如果垫不上去,那么答案就是当存在
时间复杂度
7. P4095 [HEOI2013] Eden 的新背包问题
(歪解,正解 CDQ)
首先,很明显是一个多重背包,按照多重背包的二进制拆分方式得到
假设第
- 将上一个物品的状态转移过来
- 背包
- 由于
表示最多花 元,所以还需要将花了 元的状态转移过来
- 从后往前做的背包同理:
对于每一个询问(删掉物品
时间复杂度
8. P2340 [USACO03FALL] Cow Exhibition G
设
若
若
答案即为
时间复杂度
10. P3188 [HNOI2007] 梦幻岛宝珠
做题心得
当题目有地方与思路冲突时,考虑寻找性质,转换冲突的地方,使得更好处理。
物品数很少,体积很大,但
接着考虑合并背包,有个重要的性质:
若接下来只考虑体积为
的物品,则对于一部分体积总和小于 的物品,其等价于一个体积为 的物品。 - 感性理解一下,将背包划分为若干个大小为
的格子,有个格子但凡被占用了 的体积,它也不能再放 体积的物品,如果 从小到大考虑,一填就必须填满一个格子,那么就不存在能够填前面空格的情况。
- 感性理解一下,将背包划分为若干个大小为
但还有个问题,
有点抽象,结合公式理解,在上面 dp 的基础上,还要先合并。为了符合逻辑方便书写,我使用的是由
最后的答案,假设
状态数
14. P2224 [HNOI2001] 产品加工
设
给 A 做,
给 B 做,
一起做,
显然
答案为
时间复杂度
15. P2851 [USACO06DEC] The Fewest Coins G
给钱是一个多重背包,找钱是一个完全背包,设
dp 完之后,答案就是
时间复杂度
17. P4170 [CQOI2007] 涂色
做题心得
寻找条件转换题意为熟悉的模型。
挺板一区间 dp,设
对于扩展区间,在本题中的实际意义就是提前涂好一层底色,再进行操作。
若
否则
时间复杂度
18. P2890 [USACO07OPEN] Cheapest Palindrome G
板区间 dp,设
,不管: 。 ,四种情况:结尾增 ,开头删 ,开头增 ,结尾删 。
答案为
19. CF149D Coloring Brackets
做题心得
当实在难以转移时,合理添加状态。
先预处理出每个括号匹配的另一半,记与
:直接 ,注意 必有一个无色,必有一个有色。 :从 转移,对于这里面区间两端取不同颜色,属于加法原理,注意 颜色不同,且 必有一个无色,必有一个有色。 :从 与 转移,这里则是乘法原理,注意 颜色不同。
正着写从小到大的区间 dp 有很多不合法的情况且 TLE,所以可以写成记忆化搜索。
答案为
20. P5851 [USACO19DEC] Greedy Pie Eaters P
做题心得
寻找区间内独有的情况,处理出这种情况的结果,然后区间 dp 计算方案。
区间 dp,设
也有可能有一头牛吃完了这个区间的最后一个派,假设这个派的位置是
答案为
21. UVA1437 String painter
首先,这题相当于染色的加强版。
考虑从空到
先赋初值,直接从
涂过来: 。 如果
,这位可以不涂: 。 从前面转移:
。
22. UVA1629 切蛋糕 Cake slicing
状态这么小直接记忆化爆搜,用二维前缀和处理每个区间内樱桃个数即可,
答案为