Leetcode746. 使用最小花费爬楼梯

/*Leetcode746. 使用最小花费爬楼梯*/
#define MIN(a,b) ((a)<(b)?(a):(b))

int minCostClimbingStairs(int* cost, int costSize) {
  int *minCost = (int *)calloc(costSize, sizeof(int));
  minCost[0] = cost[0];//--初始值
  minCost[1] = cost[1];//--初始值
  for (int i = 2; i < costSize; i++) {
    minCost[i] = MIN(minCost[i - 2] + cost[i], minCost[i - 1] + cost[i]);//--踩到第n级相当于 第n级 加上 前两级的最小的体力::重复利用了上一步的结果
  }
  return MIN(minCost[costSize-1],minCost[costSize-2]);//--到最后一级不需要耗费当级的体力,所以返回 前两级的最小的体力 的 最小值
}

 

 是否使用动态规划,取决于该问题是否重复利用上一步的结果

参考:如何理解动态规划? - 牛岱的回答 - 知乎 https://www.zhihu.com/question/39948290/answer/612439961

动态规划问题的问法:只问最优解,不问具体的解

  • 动态规划用于求解 多阶段决策问题 ;
  • 动态规划问题的问法:只问最优解,不问具体的解;
  • 掌握 无后效性 解决动态规划问题:把约束条件设置成为状态。

posted on 2021-03-06 21:47  平ping  阅读(77)  评论(0)    收藏  举报