题解 | 最小花费爬楼梯
最小花费爬楼梯
https://www.nowcoder.com/practice/6fe0302a058a4e4a834ee44af88435c7
#include <algorithm>
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int n = cost.size();
vector<int> dp(n+1,0);
dp[0] = 0;
dp[1] = 0;
for (int i = 2; i <=n; i++) {
dp[i] = min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1]); //dp[i] 表示到达第 i 阶(楼顶是第 n 阶)的最小成本,楼顶本身没有成本,成本来自于踩过的台阶。
}
return dp[n];
}
};
//空间优化版本
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int n = cost.size();
int prev2 = 0; // 到达i-2阶的最小成本
int prev1 = 0; // 到达i-1阶的最小成本
for (int i = 2; i <= n; i++) {
int current = min(prev1 + cost[i - 1], prev2 + cost[i - 2]);
prev2 = prev1;
prev1 = current;
}
return prev1;
}
};
动态规划 空间换时间 文章被收录于专栏
动态规划通常用于求解最优解问题, 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干子问题,先求解子问题, 然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题, 经分解得到的子问题往往不是互相独立的。

