数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。
每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。
请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
状态转移方程
dp[i] = min(dp[i-1], dp[i-2]) + dp[i];
边界条件
dp[0] = cost[0], dp[1] = cost[1]
这题总感觉题目描述得不太行,cost数组中的最后一个元素并不是最高层,而是最高层的下面的一个楼层。同时,题目隐含了最高层所需体力值为0这个条件。
算是第一次独立用动态规划方法做出动态规划的题吧,第一天就刷到这了,暑假继续加油。
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int top = cost.size() - 1;int dp[1005] = {0};for(int i = 0; i <= top; i++)dp[i] = cost[i];for(int i = 2; i <= top+1; i++)dp[i] = min(dp[i-1], dp[i-2]) + dp[i];return dp[top+1];}
};