1.将原问题分解为子问题
将原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题都解决,原问题即解决。
子问题的解一旦求出就会被保存,所以每个子问题只需求解一次。
、
2.确定状态
在用动态规划解题时,我们往往将和子问题相关的各个变量的一组取值,称之为一个“状态”。一个“状态” 对应于一个或多个子问题,所谓某个“状态”下的“值”,就是这个“状态”,所对应的子问题的解。
3.确定一些初始状态(边界状态)的值。
4.确定状态转移方程
定义出什么是“状态”, 以及在该“状态” 下的“值”后,就要找出不同的状态之间如何迁移–即如何从一个或多个“值” 已知“状态”,求出另一个“状态”的“值”。状态的迁移可以用递推公式表示,此递推公式也可被称作“状态转移方程”。
能用动规解决的问题的特点
(1) 问题具有最优子结构性质。
如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构。
(2) 无后效性。当前的若干个状态值一旦确定,则此后过程的演变就之和这若干个状态的值有关,和之前是采取哪种缩短或经过哪条路径演变到当前的着若干个状态,没有关系。