动态规划之使用最小花费爬楼梯【LeetCode】

简介: 动态规划之使用最小花费爬楼梯【LeetCode】


LCR 088. 使用最小花费爬楼梯

LCR 088. 使用最小花费爬楼梯

解法1

状态表示这是最重要的):dp[i]表示以第i级台阶为楼层顶部,到达第i层台阶的最低花费。

状态转移方程最难的):dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);

初始化:根据题意,我们需要知道到达第1层和第2层台阶的最低花费,第1层和第2层台阶的最低花费为0,并且vector会自动将所有元素初始化为0,所以可以忽略这一步。

填表顺序:当我们求解当前问题时,需要知道所需较小子问题的解,这就需要我们先求解得到较小子问题的解,这就是填表顺序。我们这道解法是从左向右填表。

返回值n = cost.size(); return dp[n];

代码实现:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n= cost.size();
        vector<int> dp(n+1);
        int i = 0;
        for(i = 2; i <= n; i++)
        {
            dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);
        }
        return dp[n];
    }
};

解法2

状态表示这是最重要的):dp[i]表示从第i级台阶开始,到达楼层顶部的最低花费。

状态转移方程最难的):dp[i] = cost[i]+min(dp[i+1], dp[i+2]);

初始化n = cost.size(); dp[n-1]=cost[n-1], dp[n-2]=cost[n-2];

填表顺序:当我们求解当前问题时,需要知道所需较小子问题的解,这就需要我们先求解得到较小子问题的解,这就是填表顺序。我们这道解法是从右向左填表。

返回值return min(dp[0], dp[1]);

代码实现:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n = cost.size();
        vector<int> dp(n);
        dp[n-1]=cost[n-1], dp[n-2]=cost[n-2];
        for(int i = n-3; i >= 0; i--)
        {
            dp[i] = cost[i]+min(dp[i+1], dp[i+2]);
        }
        return min(dp[0], dp[1]);
    }
};

     😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄

相关文章
|
3月前
代码随想录 Day46 动态规划14 LeetCode T392 判断子序列 T115 不同的子序列
代码随想录 Day46 动态规划14 LeetCode T392 判断子序列 T115 不同的子序列
37 0
|
3天前
[leetcode~数位动态规划] 2719. 统计整数数目 hard
[leetcode~数位动态规划] 2719. 统计整数数目 hard
|
8天前
|
算法
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
30 1
|
1月前
|
Go C++
【力扣】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
【2月更文挑战第17天】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
31 8
|
1月前
动态规划之解码方法【LeetCode】
动态规划之解码方法【LeetCode】
|
1月前
|
算法
动态规划之第 N 个泰波那契数/三步问题【leetCode】【算法】
动态规划之第 N 个泰波那契数/三步问题【leetCode】【算法】
|
2月前
|
机器学习/深度学习 人工智能 测试技术
【动态规划】【矩阵快速幂】LeetCode2851. 字符串转换
【动态规划】【矩阵快速幂】LeetCode2851. 字符串转换
|
3月前
|
算法 C++ 机器人
力扣 C++|一题多解之动态规划专题(1)
力扣 C++|一题多解之动态规划专题(1)
42 0
力扣 C++|一题多解之动态规划专题(1)
|
3月前
代码随想录 Day47 动态规划15 LeetCode T583 两个字符串的删除操作 T72 编辑距离
代码随想录 Day47 动态规划15 LeetCode T583 两个字符串的删除操作 T72 编辑距离
35 0
|
30天前
|
机器学习/深度学习 算法
力扣刷题日常(一)
力扣刷题日常(一)
20 2