目录
动态规划适用场景
一般使用暴力搜索的题都可用动态规划进行优化。进行枚举(暴力搜索)时会出现重复的子问题,这些重复的子问题会大大增加程序运行所需时间,动态规划的出现就是解决重复子问题重复出现的情况,使用记忆数据将子问题的最优解记录下来,下次直接重记忆数组中取就好了。
动态规划的构成
1.记忆数组:在问题回溯过程中,使用记忆数组记录当前问题的最优解,方便我们在遇到重复子问题时不用再计算,直接在表中取值就行。
2.状态转移方程: 状态转移方程分为两部分
1> 初始状态:想当于出口,也就是最小子问题的直接解 (举个例子找钱,找0 元 一定是0)
2>一般状态转移方程: 每道题都有不通的求解方法,有的是求最大值,有的是求最小值,使用一般
状态转移方程来填写记忆数组。
动态规划解题方法
动态规划的解题最后的答案会存储在 记忆数组 (dp[]) 的最后一位上。
也就是你在使用住状态转移方程填表的过程就是解题的过程。记忆数组填写完毕就是答案出来的时候。
动态规划例子
中等难度: LeetCode 剑指Offer II 103.最少的硬币数目
困难难度:LeetCode 514.自由之路