代码随想录算法训练营第三十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

85 阅读1分钟

代码随想录算法训练营第三十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

动态规划

  1. 递推公式
  2. DP数组如何初始化,下标即含义
  3. 遍历顺序
  4. 五部曲

509. 斐波那契数

题目链接:509. 斐波那契数

  • Dp[i] 含义
  • 递推公式: dp[i] = dp[i - 1] + dp[i -2];
  • 如何初始化
  • 遍历顺序

70. 爬楼梯

题目链接:70. 爬楼梯

  • Dp[i] 含义
  • 递推公式: dp[i] = dp[i - 1] + dp[i -2];
  • 如何初始化
  • 遍历顺序
  • 这里的dp[0]的含义其实是没有的,只是为了符合递推公式使dp[2] = 2, 所以dp[0] = 1;

746. 使用最小花费爬楼梯

题目链接:746. 使用最小花费爬楼梯

  • Dp[i] 含义 到达i阶的最小花费值
  • 递推公式: dp[i] = dp[i - 1] + dp[i -2];
  • 如何初始化
  • 遍历顺序
  •  class Solution {
     public:
         vector<int> memo;
         int minCostClimbingStairs(vector<int>& cost) {
             int len = cost.size();
             memo.resize(len);
             return min(dp(cost, len - 1), dp(cost, len - 2));
         }
         int dp(vector<int> &cost, int n) {
             if (n == 0 || n == 1) {
                 return cost[n];
             }
             if (memo[n] != 0) {
                 return memo[n];
             }
             memo[n] = cost[n] + min(dp(cost, n - 1), dp(cost, n - 2));
             return memo[n];
     ​
         }
     };