这又是一道动态规划的题,与计算上楼梯的方法数类似。这一次题目给出一个数组,数组中每个数代表一级楼梯,而其数的值代表上该楼梯所虚花费的体力,要求得出上楼梯所虚花费的最小值。首先我们通过cost.length()得到级数n,f(n)为代表上n级楼梯所需要的体力数。
当楼梯有两级时,我们需要比较第一级与第二级哪个楼梯耗费的体力更少,故能得到方程:
当楼梯有三级时,我们可以得到以下公式:
由此我们可以得出状态转移方程:
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int n = cost.size();
vector<int> dp(n+1);
dp[1] = cost[0];
dp[2] = min(dp[1],cost[1]);
for(int i = 3; i < n; i++)
{
dp[i] = min(dp[i-1]+cost[i],dp[i-2]+cost[i-1]);
}
return dp[n-1];
}
};