原文地址:http://www.cnblogs.com/sdjl/articles/1274312.html
(DP概念讲的很清楚!而且很容易懂!)
思考动态问题6点
1.最优子结构
子问题最优时母问题通过优化选择后一定最优的情况叫做“最优子结构”。
2.子问题重叠
母问题与子问题本质上是同一个问题的情况称为“子问题重叠”。
3.边界
我们把子问题在一定时候就不再需要提出子子问题的情况叫做边界,没有边界就会出现死循环。
4.子问题独立
一个母问题在对子问题选择时,当前被选择的子问题两两互不影响的情况叫做“子问题独立”。
一个解决问题的方法符合以上4点即属于动态规划
动态规划不是算法,它是一种方法
extra
5.做备忘录
我们可以把问题的解放在一个变量中,如果再次遇到这个问题就直接从变量中获得答案,因此每一个问题仅会计算一遍,如果不做备忘的话,动态规划就没有任何优势可言了。
6.时间分析
时间复杂度=子问题数×选择数
事实上需要的时间小于该值
用动态规划解决问题的思考步骤
1、构造问题所对应的过程。
2、思考过程的最后一个步骤,看看有哪些选择情况。
3、找到最后一步的子问题,确保符合“子问题重叠”,把子问题中不相同的地方设置为参数。
4、使得子问题符合“最优子结构”。
5、找到边界,考虑边界的各种处理方式。
6、确保满足“子问题独立”,一般而言,如果我们是在多个子问题中选择一个作为实施方案,而不会同时实施多个方案,那么子问题就是独立的。
7、考虑如何做备忘录。
8、分析所需时间是否满足要求。
9、写出转移方程式。