给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
const int maxn=1e3+5;
int dp[maxn];
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
dp[1]=cost[0];
for(int i=2;i<=cost.size();i++)
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
int sum=dp[cost.size()];
memset(dp,0,sizeof(dp));
dp[2]=dp[1]+cost[1];
for(int i=3;i<=cost.size();i++)
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
return min(sum,dp[cost.size()]);
}
};