动态规划算法的基本思想时将问题分解成多层个子问题。先求解子问题并将其记录,然后自底向上,从这些子问题求得原问题的解。
如果用递归来求解的话,是自顶向下来求解的,动态规划和它相反,也就是说递归怎么来,动态规划就逆着来。
求解动态规划的问题一般分这几个步骤:
1.找出最优解的性质,并刻画其结构特征(从题目中寻找合适的量来表达)
2.递归地定义最优值
3.以自底向上的方式计算最优值(按递归的反向来)
4.根据计算最优值时得到的信息,构造最优解
总的来说就是从最小的子问题出发推出上层父问题,一直推到原问题。
一句话来表示就是寻找合适的结构,然后按照递归的反向逆着求解。
其中寻找合适的结构来递归表达最难,这里总结了下几种常见的情况:
1.像矩阵连乘问题,租用游艇问题,多边形游戏,凸多边形的最优三角分割问题这样的,寻找最优的断点来分割段,从而寻找最优解的
2.流水线作业调度,TSP问题这样,把剩下的子问题作为一个集合的
3.0-1背包问题,资源分配问题,xxxxx的
4.最长公共子序列,这个好像比较特别一点
其实就是和小学时做应用题一样,从题目中找出有用的量,拿来表示问题的解的结构这样。