1. 程式人生 > >746使用最小花費爬樓梯

746使用最小花費爬樓梯

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        //動態規劃,確定好狀態,dp[i]表示跳到i階花的代價
        //所以最後爬完樓梯花費代價是dp[n],注意不是n-1,因為需要爬完整個樓梯
        //狀態轉移方程:dp[i] = min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1])
        //因為i階要麼從i-1跳過來,要麼從i-2跳到i
        //邊界條件,dp[0],dp[1] = 0,因為可以直接從他們開始,而不是跳到0,1
        vector<int> dp(cost.size()+1,0);
        dp[0] = 0;
        dp[1] = 0;
        for(int i = 2;i<=cost.size();++i)
        {
            dp[i] = min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1]);
        }
        return dp[cost.size()];
    }
};