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