[动态规划]最小花费爬楼梯

114 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

问题

给定一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

代码实现

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param cost int整型vector 
     * @return int整型
     */
    int minCostClimbingStairs(vector<int>& cost) {
        // write code here
        // dp 存储到达每级台阶的最小费用
        vector<int> dp(cost.size()+1, 0);
        // 因为可以从第一级或第二级台阶开始,所以 dp[0] 和 dp[1] 为 0
        for (int i = 2; i <= cost.size(); i++)
        {
            // 比较前一级向上走一个台阶 和 前两级向上两个台阶
            dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
        }
        return dp[cost.size()];
    }
};