所以一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定的!
每个阶段只有一个状态->递推;
每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心;
每个阶段的最优状态是由之前所有阶段的状态的组合得到的->搜索;
每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的->动态规划。
枚举是枚举所有答案,然后依次验证。dp是分析问题的结构找到dp方程来求解
动态规划的本质,是对问题状态的定义和状态转移方程的定义。
一般求最大值/最小值、求可不可行、求方案总数90%的概率是使用动态规划来求解。要重点说明的是,如果一个问题让你求出“所有的”方案和结果,则肯定不是使用动态规划。
解决一个动态规划问题首先根据“问5”判断是否是动态规划的问题,如果是,则尝试将其按照“问4”进行分类,找到对应的类别和相似的问题。接着从下面的4个要素去逐步剖析解决这道题:
1. 状态是什么
2. 状态转移方程是什么
3. 状态的初始值是什么
4. 问题要求的最后答案是什么