在分治算法的过程当中,分为若干个子问题有时候是完全相同的,我们只需要把它存储起来,用到的时候在查找提取,可以大大优化算法的时间复杂度
解决动态规划的一般步骤
- 识别动态规划特征
- 最优子结构:问题的最优解可以由子问题的最优解有效的构造出来
- 重叠子问题:许多相同的子问题会被重复计算
- 定义状态:通常用数组(一维二维)来表示某个特定阶段的解。
- 例如
dp[i]表示爬楼梯问题中,爬到第i层的解
- 例如
- 推导状态方程:爬楼梯问题,例如
dp[i]=dp[i−1]+dp[i−2] - 确定初始状态/递归出口
- 确定计算顺序:自上而下/自下而上