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