1.能用动态规划解决的问题的特点:
1)问题具有最有子结构性质。如果问题的最优解包含的子问题的解也是最优的,就称该问题有最优子结构性质
2)无后效性。当前的若干状态值一旦确定,则此后过程的演变就之和这若干个状态的值有关,和之前是采取哪种手段或经过那条路径演变到当前的这若干个状态,没有关系。
2.思路:
1)把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题解决了,原问题即可解决。子问题的解一旦求出就会保存,所以只需要求一次
2)确定状态:整个问题的时间复杂度是状态数乘以计算每个状态所需时间,状态可以是一个数(如:数字三角形求最大和),也可以是一行(如:二维数组),也可以是其他形式。
3)确定初始状态 / 边界状态的值。
4)确定状态转移方程不同状态之间如何迁移
例题:最长上升子序列hdu1069,数字三角形
动规常见的两种形式:递归型(容易爆栈),递推型(可以用动态滚动数组,但要注意顺序,方向)