二刷代码随想录训练营Day 32|动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

1.理论基础

代码随想录

视频:从此再也不怕动态规划了,动态规划解题方法论大曝光 !| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili

2.斐波那契数

代码随想录

视频:手把手带你入门动态规划 | LeetCode:509.斐波那契数_哔哩哔哩_bilibili

代码:

cpp 复制代码
class Solution {
public:
    int fib(int n) {
        if(n < 2) return n;
        vector<int> dp(n + 1,0);
        dp[0] = 0;
        dp[1] = 1;
        for(int i = 2; i <= n; i++){
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
};

note:

dp数组的含义:第i个下标对应的斐波那契数列值是dpi ,因此要求得dpn,数组要有n+1个元素

递推公式:dpi = dpi - 1 + dpi - 2

dp数组初始化:初始化前两个元素即可------dp0 = 0 dp1 = 1

遍历顺序:从前向后遍历------因为后面的元素要依靠前面的元素得出

3.爬楼梯

代码随想录

视频:带你学透动态规划-爬楼梯(对应力扣70.爬楼梯)| 动态规划经典入门题目_哔哩哔哩_bilibili

代码:

cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        if(n <= 2) return n;
        vector<int> dp(n + 1,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];
    }
};

note:

dp数组的含义:爬到第i个楼梯所用的方法数是dpi

递推公式:爬到第i个楼梯,可以从第i-1个楼梯往上爬,也可以从第i - 2个楼梯往上爬。因此,爬到第i个楼梯的方法数 = dpi = dpi - 1 + dpi - 2

dp数组初始化:从实际意义考虑,我们初始化第1个和第2个台阶的方法数是1 和 2。

遍历顺序:从前向后遍历------因为后面的元素要依靠前面的元素得出

这道题的dp数组其实就是斐波那契数列。

4.使用最小花费爬楼梯

代码随想录

视频讲解:动态规划开更了!| LeetCode:746. 使用最小花费爬楼梯_哔哩哔哩_bilibili

代码:

cpp 复制代码
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        if(cost.size() < 2) return 0;
        vector<int> dp(cost.size() + 1,0);
        dp[0] = 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()];
    }
};

note:

注意这里是要爬到楼顶,也就是爬到cost.size()层,对应的dp数组大小是cost.size() + 1

dp数组的含义:爬到第i个台阶所用的最小花费是dpi

递推公式:dpi = min(dpi-1 + costi-1,dpi - 2 + costi - 2)

dp数组的初始化:初始化dp0 = 0 dp1 = 0,因为题上说可以从i= 0和i= 1的台阶开始爬

遍历顺序:从前向后遍历------因为后面的元素要依靠前面的元素得出

相关推荐
Yyyyyy~6 小时前
【C++】STLday1
c++
无名猿6 小时前
左值、右值、纯右值、将亡值:值类别入门
c++·内存管理·现代c++·语法基础
一木 之林6 小时前
DDPM扩散模型代码实战:前向加噪造数据、U-Net噪声预测与反向生成手写数字
人工智能·算法·计算机视觉
程序员老陆6 小时前
C++ 将亡值(xvalue)深度解析:从表达式分类到参数传递陷阱
c++·程序设计
嘎嘎风6 小时前
MiniMind 学习笔记之 02 字是怎么变成数字的?
算法
QAQmmttyyy6 小时前
ChatFly 开发实录 ⑧|一个 VAD 的自我修养
算法
Logic1016 小时前
关于汉诺塔问题的分析
c语言·算法·递归·函数·解题思路·递归函数·汉诺塔问题
维克兜率天6 小时前
【维克】配对交易的季节性:哪些品种适合长拿?
android·开发语言·笔记·python·算法·kotlin·量化
沫璃染墨7 小时前
《Qt从零入门系列(十二):Qt文件操作详解——从QFile读写到QFileInfo与记事本实战》
开发语言·网络·c++·qt·交互·信号处理·文件
青少儿编程课堂7 小时前
树上启发式合并详解:子树颜色众数统计与复杂度拆解
c++·python·算法·bfs·信息学竞赛