-
https://labuladong.online/algo/essential-technique/dynamic-programming-framework/
-
动态规划一般的形式就是求最值!
首先,虽然动态规划的核心思想就是穷举求最值,但是问题可以千变万化,穷举所有可行解其实并不是一件容易的事,需要你熟练掌握递归思维,只有列出正确的「状态转移方程」,才能正确地穷举。而且,你需要判断算法问题是否具备「最优子结构」,是否能够通过子问题的最值得到原问题的最值。另外,动态规划问题存在「重叠子问题」,如果暴力穷举的话效率会很低,所以需要你使用「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算 -
明确「状态」-> 明确「选择」 -> 定义 dp 数组/函数的含义。
-
代码框架:
1 | # 自顶向下递归的动态规划 |
1、斐波那契数列
严格来说斐波那契不属于动态规划问题, 因为没有求最值问题,只存在重叠子问题!
1.1 暴力递归
1 |
|
__END__