前言:
动态规划的基本思想: 利用已知的历史记录完成对未知记录的计算,从而使得效率相比递归有大的提高。
其基本解题步骤如下:
基本步骤:
1.定义dp数组所表示的含义
动态规划需要一个变量来保存历史记录,或者是一维数组,或者是二维数组,我们称其为dp(Dynamic Programming)数组。要明确数组下标的含义及每个元素所对应的意思。
2.确定递推公式
说简单点就是找出dp数组元素之间的关系,这一步是核心也是难点,常常通过 “ 最后一步 ” 和 “ 子问题 ” 来确定。
最后一步: 假设前面若干步都是最优的,最后一步如何选择依旧满足最优。
3.定义初始条件及边界
有一些不能由递推公式求出的,要直观的给出答案。边界情况自然是数组不能越界。
4.遍历顺序(计算顺序)
按照怎样的顺序去计算(小->大;大->小)
通常只有一个原则: 当要算递推公式等式左边的时候,等式右边用到的状态都已经算过了。
原题如下: