目录

代码随想录算法训练营第三十二天20250228-509.-斐波那契数,70.-爬楼梯,746.-使用最小花费爬楼梯-补卡20250309

代码随想录算法训练营第三十二天(20250228) |509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯 -[补卡20250309]

动态规划五步

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

509. 斐波那契数

class Solution {
public:
    int fib(int n) {
        if(n==0){
            return 0;
        }else if(n==1){
            return 1;
        }
        vector<int> v(n+1, 0);
        v[1] = 1;
        for(int i{2}; i<v.size(); i++){
            v[i] = v[i-1] + v[i-2];
        }
        return v.back();
    }
};

70. 爬楼梯

  1. 动态规划五步曲
class Solution {
public:
   int climbStairs(int n) {
       vector<int> dp(n+1, 0);
       dp[0] = 1;
       dp[1] = 1;
       for(int i{2}; i<=n; i++){
           dp[i] = dp[i-1] + dp[i-2];
       }
       return dp[n];
   }
};

746. 使用最小花费爬楼梯

  1. 动态规划五步曲
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        vector<int> dp(cost.size()+1, 0);
        dp[0] = 0;
        dp[1] = 0;
        for(int i{2}; i<dp.size(); i++){
            dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);
        }
        return dp.back();
    }
};