###### 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()]; } }; ```