动态规划总结篇
参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!
# 动态规划最强总结篇!
如今动态规划已经讲解了42道经典题目,共50篇文章,是时候做一篇总结了。
关于动态规划,在专题第一篇[关于动态规划,你该了解这些!](https://programmercarl.com/动态规划理论基础.html)就说了动规五部曲,**而且强调了五部对解动规题目至关重要!**
这是Carl做过一百多道动规题目总结出来的经验结晶啊,如果大家跟着「代码随想哦」刷过动规专题,一定会对这动规五部曲的作用感受极其深刻。
动规五部曲分别为:
1. 确定dp数组(dp table)以及下标的含义
2. 确定递推公式
3. dp数组如何初始化
4. 确定遍历顺序
5. 举例推导dp数组
动规专题刚开始的时候,讲的题目比较简单,不少录友和我反应:这么简单的题目 讲的复杂了,不用那么多步骤分析,想出递推公式直接就AC这道题目了。
**Carl的观点一直都是 简单题是用来 巩固方法论的**。 简单题目是可以靠感觉,但后面稍稍难一点的题目,估计感觉就不好使了。
在动规专题讲解中,也充分体现出,这动规五部曲的重要性。
还有不少录友对动规的理解是:递推公式是才是最难最重要的,只要想出递归公式,其他都好办。
**其实这么想的同学基本对动规理解的不到位的**。
动规五部曲里,哪一部没想清楚,这道题目基本就做不出来,即使做出来了也没有想清楚,而是朦朦胧胧的就把题目过了。
* 如果想不清楚dp数组的具体含义,递归公式从何谈起,甚至初始化的时候就写错了。
* 例如[动态规划:不同路径还不够,要有障碍!](https://programmercarl.com/0063.不同路径II.html) 在这道题目中,初始化才是重头戏
* 如果看过背包系列,特别是完全背包,那么两层for循环先后顺序绝对可以搞懵很多人,反而递归公式是简单的。
* 至于推导dp数组的重要性,动规专题里几乎每篇Carl都反复强调,当程序结果不对的时候,一定要自己推导公式,看看和程序打印的日志是否一样。
好啦,我们再一起回顾一下,动态规划专题中我们都讲了哪些内容。
## 动态规划基础
* [关于动态规划,你该了解这些!](https://programmercarl.com/动态规划理论基础.html)
* [动态规划:斐波那契数](https://programmercarl.com/0509.斐波那契数.html)
* [动态规划:爬楼梯](https://programmercarl.com/0070.爬楼梯.html)
* [动态规划:使用最小花费爬楼梯](https://programmercarl.com/0746.使用最小花费爬楼梯.html)
* [动态规划:不同路径](https://programmercarl.com/0062.不同路径.html)
* [动态规划:不同路径还不够,要有障碍!](https://programmercarl.com/0063.不同路径II.html)
* [动态规划:整数拆分,你要怎么拆?](https://programmercarl.com/0343.整数拆分.html)
* [动态规划:不同的二叉搜索树](https://programmercarl.com/0096.不同的二叉搜索树.html)
## 背包问题系列
* [动态规划:关于01背包问题,你该了解这些!](https://programmercarl.com/背包理论基础01背包-1.html)
* [动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://programmercarl.com/背包理论基础01背包-2.html)
* [动态规划:分割等和子集可以用01背包!](https://programmercarl.com/0416.分割等和子集.html)
* [动态规划:最后一块石头的重量 II](https://programmercarl.com/1049.最后一块石头的重量II.html)
* [动态规划:目标和!](https://programmercarl.com/0494.目标和.html)
* [动态规划:一和零!](https://programmercarl.com/0474.一和零.html)
* [动态规划:关于完全背包,你该了解这些!](https://programmercarl.com/背包问题理论基础完全背包.html)
* [动态规划:给你一些零钱,你要怎么凑?](https://programmercarl.com/0518.零钱兑换II.html)
* [动态规划:Carl称它为排列总和!](https://programmercarl.com/0377.组合总和Ⅳ.html)
* [动态规划:以前我没得选,现在我选择再爬一次!](https://programmercarl.com/0070.爬楼梯完全背包版本.html)
* [动态规划: 给我个机会,我再兑换一次零钱](https://programmercarl.com/0322.零钱兑换.html)
* [动态规划:一样的套路,再求一次完全平方数](https://programmercarl.com/0279.完全平方数.html)
* [动态规划:单词拆分](https://programmercarl.com/0139.单词拆分.html)
* [动态规划:关于多重背包,你该了解这些!](https://programmercarl.com/背包问题理论基础多重背包.html)
* [听说背包问题很难? 这篇总结篇来拯救你了](https://programmercarl.com/背包总结篇.html)
## 打家劫舍系列
* [动态规划:开始打家劫舍!](https://programmercarl.com/0198.打家劫舍.html)
* [动态规划:继续打家劫舍!](https://programmercarl.com/0213.打家劫舍II.html)
* [动态规划:还要打家劫舍!](https://programmercarl.com/0337.打家劫舍III.html)
## 股票系列
* [动态规划:买卖股票的最佳时机](https://programmercarl.com/0121.买卖股票的最佳时机.html)
* [动态规划:本周我们都讲了这些(系列六)](https://programmercarl.com/周总结/20210225动规周末总结.html)
* [动态规划:买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II(动态规划).html)
* [动态规划:买卖股票的最佳时机III](https://programmercarl.com/0123.买卖股票的最佳时机III.html)
* [动态规划:买卖股票的最佳时机IV](https://programmercarl.com/0188.买卖股票的最佳时机IV.html)
* [动态规划:最佳买卖股票时机含冷冻期](https://programmercarl.com/0309.最佳买卖股票时机含冷冻期.html)
* [动态规划:本周我们都讲了这些(系列七)](https://programmercarl.com/周总结/20210304动规周末总结.html)
* [动态规划:买卖股票的最佳时机含手续费](https://programmercarl.com/0714.买卖股票的最佳时机含手续费(动态规划).html)
* [动态规划:股票系列总结篇](https://programmercarl.com/动态规划-股票问题总结篇.html)
## 子序列系列