动态规划 Dynamic Programming¶
动态规划 和 递归和分支 没有根本区别(关键看有无最优子结构)
共性:找到重复子问题
差异性:最优子结构、中途可以淘汰次优解
计算机其实很“傻”,只能递归或循环。动态规划其实就是要穷举所有可能的方案,所有方案中会存在一些重复的操作,我们要优化这些无用功,让计算机“聪明地”穷举。
动态规划三部曲: 1. 定义 dp table,明确 dp[i] 或者 dp[i][j] 或者更高阶的含义 2. 确定 dp 方程,因为 dp[i] 总是会与 dp[i-1] 或者 dp[i-2] 或者其他位置的数值有着千丝万缕的联系 3. 确定初始值
多多练习,在场景中理解