动态规划解题流程
一、认识动态规划
二、动态规划的题目类型
1. 求最大最小值
①从左上角走到右下角路径的组大数字和
②最长上升子序列长度
最常见的题目类型
2. 计数
①有多少种方式走到右下角
②有多少种方法选出k个数使得和是sum
3. 求存在性
①取石子游戏,先手是否必胜
②能不能选出k个数使得和是sum
三、求最大最小值(Coin Change)
有三种硬币,分别面值为2元、5元和7元,每种硬币足够多
买一本书需要27元
如何用最少的硬币组合正好付清,不需要找钱
1. 确定状态
1)最后一步
①假设序列a1 a2 … ak是最优解
②则a1 a2 … ak-1是拼出27-ak的最优解
可以用反证法证明,若②不成立,则①也不成立
2)子问题
所以现在我们只需要求27-ak的最优解
相当于缩小了问题规模
2. 状态转移方程
3. 初始条件和边界情况
4. 计算顺序
根据状态转移方程决定计算顺序
四、计数(Unique Paths)
1. 确定状态
1)最后一步
2)子问题
2. 状态转移方程
3. 初始条件和边界状态
4. 计算顺序
略
五、求存在性(Jump Game)
1. 确定状态
1)最后一步
2)子问题
2.状态转移方程
3. 初始条件和边界情况
4. 计算顺序
略
六、总结动态规划适用情况
①最优化原理:假设问题的最优解所包括的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
②无后效性:即某阶段状态一旦确定。就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响曾经的状态。仅仅与当前状态有关;
③有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到(该性质并非动态规划适用的必要条件,可是假设没有这条性质。动态规划算法同其它算法相比就不具备优势)。