题目如下:
分析: 这道题可以感觉出来是动态规划问题,
1、先定义状态表示,我这里dp[i] 表示走到第 i 个位置花费了多少钱(包括第 i 个位置的花费)
2、方程: dp[i] = min(dp[i - 1] , dp[i - 2]) + cost[i];
3、初始化: 根据方程,我们要初始化dp[0]和dp[1] ,根据定义,
dp[0] = cost[0], dp[1] = cost[1]
4、返回值: 根据定义,我们应该返回dp[costSize].(看方程发现,i = costSize时,cost数组会越界,且在第costSize个阶梯不用花钱,所以循环到costSize-1,出来再进行一次dp[i] = min(dp[i - 1] , dp[i - 2])就可以了)
代码:
int min(int x, int y)
{
return x>y?y:x;
}
int minCostClimbingStairs(int* cost, int costSize){
int dp[1001];
int i = 0;
dp[0] = cost[0];
dp[1] = cost[1];
for(i = 2; i < costSize; i++)
{
dp[i] = min(dp[i-1], dp[i-2]) + cost[i];
}
dp[costSize] = min(dp[i-1], dp[i-2]);
return dp[costSize];
}
感谢各位的支持!