- class Solution {
- public:
- int fib(int n) {
- if(n<=1) return n;
- vector<int> dp(n+1);
- dp[0] = 0;
- dp[1] = 1;
- for(int i=2;i<=n;i++)
- {
- dp[i] = dp[i-1] + dp[i-2];
- }
- return dp[n];
- }
- };
- /*动规五部曲
- 1.确定dp数组及下标的含义
- 2.确定递推公式
- 3.初始化dp数组
- 4.确定遍历顺序
- 5.举例推导dp数组*/
- class Solution {
- public:
- int climbStairs(int n) {
- if(n<=2) return n;
- vector<int> dp(n+1);
- dp[0] = 0,dp[1] = 1,dp[2] = 2;
- for(int i=3;i<=n;i++)
- {
- dp[i] = dp[i-1] + dp[i-2];
- }
- return dp[n];
- }
- };
- /*1.确定数组dp的下标含义 2.确定递推公式 3.初始化数组 4.确定遍历顺序 5.举例推到dp数组*/
- class Solution {
- public:
- int minCostClimbingStairs(vector<int>& cost) {
- vector<int> dp(cost.size()+1);//定义一个数组表示当前的花费
- //赋初始值
- dp[0] = dp[1] = 0;
- for(int i=2;i<=cost.size();i++)
- {
- dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
- }
- return dp[cost.size()];
- }
- };