1. 最小花费爬楼梯
题目链接:
746. 使用最小花费爬楼梯 - 力扣(LeetCode)https://leetcode.cn/problems/min-cost-climbing-stairs/description/
2. 题目解析
3. 算法原理
1. 状态表示:以i位置为结尾
dp[i]表示:到达第i个位置的时的最小花费
2. 状态转移方程: 用dp[i]之前的状态或者之后的状态来推导出dp[i]的值
根据最近的一步来划分问题:
1. 先到达i-1的位置,支付cost[i-1]的费用,再走一步到达dp[i]
1. 先到达i-2的位置,支付cost[i-2]的费用,再走两步到达dp[i]
算出两种情况的最小花费:
到达I-1位置的最小花费就是dp[I-1] + cost[i-1]
到达I-2位置的最小花费就是dp[I-2] + cost[i-2]
那么本题的状态转移方程是:dp[i] = min(dp[I-1] + cost[i-1] , dp[I-2] + cost[i-2])
3. 初始化 :把dp表填满不越界,让后面的填表可以顺利进行
本题初始化为:dp[0] = dp[1] = 0
4. 填表顺序
本题的填表顺序是:从左到右
5. 返回值 :题目要求 + 状态表示
本题的返回值是:直接返回dp[n]
4. 代码
动态规划的固定四步骤:1. 创建一个dp表
2. 在填表之前初始化
3. 填表(填表方法:状态转移方程)
4. 确定返回值
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int n=cost.size();vector<int>dp(n+1);dp[0]=dp[1]=0;for(int i=2;i<=n;i++)dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);return dp[n];}
};
感谢观看~