动态规划的概念
-
状态:也就是DP数组的定义
-
状态转移
dp五部曲的理解
见:代码随想录
-
优先确定:状态的定义,状态转移的房产
-
根据状态转移方程确定:遍历顺序,初始化
状态压缩
-
本质上就是变量个数减少,状态定义更加简单
-
初始化和遍历顺序也要考虑
动态规划的定义理解:
重复子问题,状态,状态转移
- P1216 [IOI 1994] 数字三角形 Number Triangles
动态规划的起源:记忆化搜索
记忆化搜索本质是对回溯搜索的一种优化,很多时候先想到回溯,由回溯想到记忆化搜索,再想到动态规划
- P1434 [SHOI2002] 滑雪
- P4017 最大食物链计数
图搜索问题中的动态规划
- P1002 [NOIP 2002 普及组] 过河卒 :边界条件+数组拷贝
0-1 背包问题
背包问题的应用
经典背包问题
- P1048 [NOIP 2005 普及组] 采药
- P1802 5 倍经验日:这个背包问题需要考虑
dp[0]
的情况
价值等于重量:是否恰好装满背包
- 416. 分割等和子集
- 1049. 最后一块石头的重量 II
- 494.目标和
三维DP:
- 474. 一和零
完全背包问题
-
物体可以重复使用无限次
-
区别是:是否能利用刚更新的状态
-
转换为0-1背包问题
例题:
- 52. 携带研究材料(第七期模拟笔试)
- 518. 零钱兑换 II
- 322. 零钱兑换
- 279.完全平方数
背包问题的理解:遍历顺序
-
一般来说,先遍历背包还是物体,顺序不重要,更取决于递推公式。
-
对于一些问题(排列或组合),遍历顺序影响答案。
例题
- 377. 组合总和 Ⅳ:换顺序后,前面的物体有机会重新考虑(排序)
- 139.单词拆分:潜在考虑单词顺序
多重背包问题
线性动态规划
- P1115 最大子段和:引用背包问题的定义,维护虚假的序列和