题目:你需要爬上一个N层的楼梯,在爬楼梯的过程中,每阶楼梯需花费非负代价,第 i 阶楼梯花费代价表示cost[i],一旦你付出了代价,你可以在该阶梯基础上往上爬一阶或两阶。在开始时,你可以选择从第 0 阶或第 1 阶开始出发。请计算爬上楼层顶部的最低花费。
输入格式:
1,100,1,100,1,1,100,1,1
输出格式:
6
分析:动态规划。当前最小体力花费=min(距当前位置一阶梯的最小体力花费+走一阶梯的体力花费,距当前位置两阶梯的最小体力花费+走两阶梯的体力花费)。
- dp[i] = min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1])
求解:
class Solution {public: int minCostClimbingStairs(vector & cost) { if(cost.size()==0){ return 0; } if(cost.size()==1){ return cost[0]; } if(cost.size()==2){ return std::min(cost[0],cost[1]); } int step[1024]; step[0] = 0; step[1] = 0; for(int i=2;i<=cost.size();i++){ step[i] = std::min(step[i-1]+cost[i-1],step[i-2]+cost[i-2]); } return step[cost.size()]; }};