#include <algorithm>
#include <vector>
class Solution {
public:
//dp[i]:到达第i层台阶所需的最小cost总和。而cost[i]指的是从第i层楼梯起步所需要的cost,支付cost后能爬1~2步。
//递推公式:dp[i]=min(dp[i-1]+cost[i-1] , dp[i-2]+cost[i-2])
//初始化:dp[0]=0,dp[1]=0。
//遍历顺序:从前往后
//细节:到达台阶顶部是要比cost数组的size多1的。比如[2,5,20],20并不是台阶顶部,而是到达顶部前的最后一级。
int minCostClimbingStairs(vector<int>& cost) {
int costsize=cost.size();
vector<int>dp(costsize+1,0);//初始化dp,将cost.size()+1数量的元素全部初始化为0
if(costsize==1)return cost[0];//极端情况
for(int i=2;i<=costsize;i++)//注意是<=cost.size(),因为我们上面说了台阶顶部是比cost数组的大小还要多1的。
{
dp[i]=min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);
}
return dp[dp.size()-1];
}
};