📄️ 6.1 算法解释
这里我们引用一下维基百科的描述:“动态规划(Dynamic Programming, DP)在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。为了避免多次解决这些子问题,它们的结果都逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划保存递归时的结果,因而不会在解决同样的问题时花费时间 · · · · · · 动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。”
📄️ 6.2 基本动态规划:一维
70. Climbing Stairs
📄️ 6.3 基本动态规划:二维
64. Minimum Path Sum
📄️ 6.4 分割类型题
279. Perfect Squares
📄️ 6.5 子序列问题
300. Longest Increasing Subsequence
📄️ 6.6 背包问题
背包问题(knapsack problem)是一种组合优化的 NP 完全问题:有 n 个物品和载重为 w 的背包,每个物品都有自己的重量 weight 和价值 value,求拿哪些物品可以使得背包所装下物品的总价值最大。如果限定每种物品只能选择 0 个或 1 个,则问题称为 0-1 背包问题(0-1 knapsack);如果不限定每种物品的数量,则问题称为无界背包问题或完全背包问题(unbounded knapsack)。
📄️ 6.7 字符串编辑
72. Edit Distance
📄️ 6.8 股票交易
股票交 易类问题通常可以用动态规划来解决。对于稍微复杂一些的股票交易类问题,比如需要冷却时间或者交易费用,则可以用通过动态规划实现的状态机来解决。
📄️ 6.9 练习
基础难度