当前位置: 首页 > news >正文

代码随想录算法训练营第28天 | 第九章动态规划 part01

第九章 动态规划 Part 01

文章目录

  • 第九章 动态规划 Part 01
    • 理论基础
    • 509. 斐波那契数
    • 70. 爬楼梯
    • 746. 使用最小花费爬楼梯

今天正式开始 动态规划 的学习!

理论基础

无论大家之前对动态规划的理解达到什么程度,建议都要先看一下我讲的 动态规划理论基础。这是整个动态规划学习的基石。

如果你之前没有做过动态规划的题目,读到这里可能会感觉内容简单,但其实在每道动态规划题目中都可以应用到这些基础理论,所以理解基础非常重要!

动态规划中每一个状态一定是由上一个状态推导出来的,
如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组
    debug的最好方式就是把dp数组打印出来. 知道这些,直接开干。个人感觉B站视频没必要看,看下文章即可。
  • 动态规划理论基础
  • 视频讲解:B站视频

509. 斐波那契数

这道题是动态规划的入门题目,虽然简单,但它是理解 动态规划五部曲 的关键。通过这道题可以很好地掌握动态规划的基础方法。

class Solution {
public:int fib(int n) {if(n<=1)return n;else return fib(n-1)+fib(n-2);}
};

遇到的最简单的题目,一个递归就解决了,连bug都没有改。
不过也是学习下,简单题目是用来加深对解题方法论的理解的。

  1. 确定dp数组以及下标的含义
    dp[i]的定义为:第i个数的斐波那契数值是dp[i]

  2. 确定递推公式
    因为题目已经把递推公式直接给我们了:状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];

  3. dp数组如何初始化
    题目中把如何初始化也直接给我们了,如下:
    dp[0] = 0;
    dp[1] = 1;

  4. 确定遍历顺序
    从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序一定是从前到后遍历的

  5. 举例推导dp数组
    按照这个递推公式dp[i] = dp[i - 1] + dp[i - 2],我们来推导一下,当N为10的时候,dp数组应该是如下的数列:

0 1 1 2 3 5 8 13 21 34 55
确实,思路非常清晰。用五步法,按照顺序学,先给点甜头尝尝。
如果代码写出来,发现结果不对,就把dp数组打印出来看看和我们推导的数列是不是一致的。

  • 题目链接
  • 视频讲解:B站视频

70. 爬楼梯

这道题大家可以先自己思考一下,之后你会发现它和 斐波那契数 问题有一定的联系。解决这类问题的方法可以帮助你理解如何使用动态规划来优化解决问题的效率。
这题看到和 斐波那契数 问题有一定的联系,直接就联想到,爬n层楼梯只要爬n-1层楼梯再爬一层,或者只要爬n-2层楼梯再爬两层,好家伙,不就是找规律,难得还是用公式把规律展现出来。我最开始写的是斐波那契数,但是超时了。还是得靠遍历, 遍历以后,空间复杂度,和时间复杂度大幅度下降。

  • 题目链接
  • 视频讲解:B站视频
class Solution {
public:int climbStairs(int n) {if(n<=2)return n;int sum1=1;int sum2=2;int temp;for(int i=3;i<=n;i++){temp=sum1;sum1=sum2;sum2+=temp;}return sum2;}
};

746. 使用最小花费爬楼梯

这道题目在 力扣 上改过题目描述,新的描述更加清晰,明确指出第一步不需要花费。这让题目解法更加明确了。果然这题的第一步就是要去读题:给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。所以初始化 dp[0] = 0,dp[1] = 0;这一步还挺坑人的,注意一下,明白为什么即可

改后的题目相当于我文章中的 拓展 解法。
可以有两个途径得到dp[i],一个是dp[i-1] 一个是dp[i-2]。

dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。

dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。

那么究竟是选从dp[i - 1]跳还是从dp[i - 2]跳呢?

一定是选最小的,所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);

  • 题目链接
  • 视频讲解:B站视频
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {vector<int> dp(cost.size() + 1);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() ];}
};

整体上题目还是比较简单的,核心就是找规律,只要找到规律就不难。


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深度解读:从新手到专业,大模型开发者知识技能养成之路
  • 大数据开发:可视化组件Redash安装部署
  • Linux df命令详解,Linux查看磁盘使用情况
  • 力扣: 翻转字符串里的单词
  • Django创建模型
  • 从零开始学数据结构系列之第六章《排序简介》
  • 三维坐标变换
  • linux c++ 通信架构 笔记(14) 第三章 Nginx 开发初步:守护进程的信号使用,介绍 nginx 的选项与信号,后台进程与守护进程的区别
  • websocket 和sip 在协议层面有哪些区别,为什么要各自这样设置协议
  • redis的事务与管道有什么不同?
  • Vscode中搭建ABAP开发环境
  • 开源的 Kafka 管理平台
  • C++字符串的常用操作
  • cesium.js 入门到精通(6)
  • vue3.x项目使用高德地图JS API 2.0
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 2017届校招提前批面试回顾
  • C++11: atomic 头文件
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Just for fun——迅速写完快速排序
  • Nacos系列:Nacos的Java SDK使用
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • node学习系列之简单文件上传
  • Vue 动态创建 component
  • windows下如何用phpstorm同步测试服务器
  • zookeeper系列(七)实战分布式命名服务
  • 阿里云购买磁盘后挂载
  • 从零开始学习部署
  • 从输入URL到页面加载发生了什么
  • 翻译--Thinking in React
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 理解在java “”i=i++;”所发生的事情
  • 前端相关框架总和
  • 容器服务kubernetes弹性伸缩高级用法
  • 使用agvtool更改app version/build
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #Linux(权限管理)
  • $jQuery 重写Alert样式方法
  • (2)(2.10) LTM telemetry
  • (3)STL算法之搜索
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Oracle)SQL优化技巧(一):分页查询
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET 8.0 中有哪些新的变化?
  • .net CHARTING图表控件下载地址
  • .sdf和.msp文件读取
  • ??myeclipse+tomcat
  • @Autowired 和 @Resource 区别的补充说明与示例
  • [.NET]桃源网络硬盘 v7.4
  • [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)