动态规划
【自顶向下】从一个规模较大的问题
f(20)
,向下逐渐分解规模,直到f(1)
、f(2)
触底,再逐层返回答案,这就是【自顶向下】【自顶向上】直接从最低下,最简单,问题规模最小的
f(1)
和f(2)
开始往上推,直到推到想要的答案f(20)
,这就是动态规划的思路。
求解动态规划的核⼼问题是穷举。
但是这类存在重叠子问题,直接暴力搜索效率较低。故需要一个备忘录或者DP Table,避免不必要的计算。
其一定具备最优子结构,才能通过子问题的最值得到原问题的最值。
由于问题千变万化,穷举所有可行解不不容易,故需要列出正确的状态转移方法。
重叠子问题,最优子结构,状态转移方程是动态规划的三要素。
写出状态转移方程一般是最难的,一个辅助框架:
明确 状态 -> 定义 dp数组/函数的含义 -> 明确 选择 -> 明确 base case。
摘自算法小抄