状态:dp[i]表示到达第i个阶梯需要的最小花费,小技巧是令cost[n] = 0 ,最后返回dp[n]即可
状态转移方程:
dp[i] = min( dp[i-2], dp[i-1] ) + cost[i];
#include <vector>
using namespace std;
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost)
{
int n = cost.size();
vector<int> dp(n+1,0);
dp[0] = cost[0];
dp[1] = cost[1];
cost.push_back(0);
if( n == 2 )
{
return min( cost[0], cost[1] );
}
else
{
for( int i = 2; i <= n; i++ )
{
dp[i] = min( dp[i-2], dp[i-1] ) + cost[i];
}
}
return dp[n];
}
};