动态规划的特征和定义这里就不谈了,关键是要怎样通过代码来理解动态规划。这里收集了一些以前做过的动态规划典型问题。里面基本都有比较详细的注释以及当时对这些问题的一些理解和看法,并且对于所有的问题基本都有递归和迭代两种版本给大家更好的对比和理解。包括:
1.斐比那契数列(递归,迭代)
2.数学三角形问题(递归,迭代)
3.0-1背包问题(包括递归版和两种迭代版,以及一个回溯算法版本)
4.最优矩阵链相乘问题(包括递归版和迭代版)
5.最大公共子序列问题(递归和迭代版)
6.最优二叉查找树(递归和迭代版)
7.生产作业装配线问题(递归,迭代)
8.活动选择问题(包括动态规划的递归和迭代,贪心算法的递归和迭代共四种)
还有一些零散的算法就没有整理了。这些应该也差不多了。源代码免费打包下载点这里:
http://download.csdn.net/detail/wudaijun/4710694
动态规划的关键步骤是:
判断一个问题是否具有最优子结构,重叠子问题,以及子问题满足无后效性。
分解问题
找出描述每一个问题的状态量
弄清这些状态量之间转换的方式
如何通过子问题逐步构造
制作备忘和路径记录
最后加上代码就OK了