代码随想录算法训练营第三十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
动态规划
- 递推公式
- DP数组如何初始化,下标即含义
- 遍历顺序
- 五部曲
509. 斐波那契数
题目链接:509. 斐波那契数
- Dp[i] 含义
- 递推公式: dp[i] = dp[i - 1] + dp[i -2];
- 如何初始化
- 遍历顺序
70. 爬楼梯
题目链接:70. 爬楼梯
- Dp[i] 含义
- 递推公式: dp[i] = dp[i - 1] + dp[i -2];
- 如何初始化
- 遍历顺序
- 这里的dp[0]的含义其实是没有的,只是为了符合递推公式使dp[2] = 2, 所以dp[0] = 1;
746. 使用最小花费爬楼梯
题目链接:746. 使用最小花费爬楼梯
- Dp[i] 含义 到达i阶的最小花费值
- 递推公式: dp[i] = dp[i - 1] + dp[i -2];
- 如何初始化
- 遍历顺序
-
class Solution { public: vector<int> memo; int minCostClimbingStairs(vector<int>& cost) { int len = cost.size(); memo.resize(len); return min(dp(cost, len - 1), dp(cost, len - 2)); } int dp(vector<int> &cost, int n) { if (n == 0 || n == 1) { return cost[n]; } if (memo[n] != 0) { return memo[n]; } memo[n] = cost[n] + min(dp(cost, n - 1), dp(cost, n - 2)); return memo[n]; } };