---
# System prepended metadata

title: 'LeetCode #746 Min Cost Climbing Stairs'
tags: [LeetCode, Easy, Dynamic Programming]

---

###### tags: `LeetCode` `Easy` `Dynamic Programming`
# LeetCode #746 Min Cost Climbing Stairs
### (Easy)

數組的每個下標作為一個階梯，第 i 個階梯對應著一個非負數的體力花費值 cost[i]（下標從 0 開始）。

每當你爬上一個階梯你都要花費對應的體力值，一旦支付了相應的體力值，你就可以選擇向上爬一個階梯或者爬兩個階梯。

請你找出達到樓層頂部的最低花費。在開始時，你可以選擇從下標為 0 或 1 的元素作為初始階梯。

---
定義dp[i]為到達第i階樓梯的花費, 因此dp[i]為dp[i-1]加上離開第i階樓梯的花費cost[i]及dp[i-2]加上離開第i-2階的花費cost[i-2]中較小者。

使用迴圈跑完n次後, dp[n]即為答案。

---

```
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int dp[cost.size()+1];
        dp[0]=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()];
    }
};
```