代码随想录算法训练营第三十八天 | 动态规划part01

ops/2024/9/24 17:15:26/

题目:

  1. 斐波那契数
  2. 爬楼梯
  3. 使用最小花费爬楼梯

动态规划简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的。动态规划有五个步骤:

  1. 确定dp数组以及下标的含义;
  2. 确定递归公式;
  3. dp数组如何初始化;
  4. 确定遍历顺序;
  5. 举例推导dp数组;

学习内容:

509. 斐波那契数

class Solution {public int fib(int n) {if (n <= 1) return n;// 1. 确定dp数组int[] dp = new int[n + 1];// 2. dp数组的初始化dp[0] = 0;dp[1] = 1;// 3. 确定遍历顺序for (int i = 2; i <= n; i++) {// 4. 举例推导dp数组dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
}

70. 爬楼梯

这道题的重点就是找到dp数组的含义,dp[i]的含义是,爬到第i层楼梯,有dp[i]种方法。 其次,我们需要找到递归公式。

楼梯数方法
一层1
二层2
三层1+2

从表中可以发现,如果楼梯数为3,那么一层走2步可以完成任务,二层走1步也可以完成任务。所以走到第三层的方法数量就是一层的方法加二层的方法,递归公式就可以抽象为:dp[i] = dp[i - 1] + dp[i - 2];

class Solution {public int climbStairs(int n) {if (n <= 1) return n;int[] dp = new int[n + 1];dp[1] = 1;dp[2] = 2;for (int i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
}

这道题其实本质上就是斐波那契数列,因为当前数都是前两个数的和。

746. 使用最小花费爬楼梯

dp[i]表示到达第i个阶梯的所花费的最小费用,当前最小费用实际上只和i - 1和i - 2有关系,递归公式:Min(d[i - 1] + cost[i - 1], d[i - 2] + cost[i - 2])

class Solution {public int minCostClimbingStairs(int[] cost) {int[] dp = new int[cost.length + 1];dp[0] = 0;dp[1] = 0;for (int i = 2; i <= cost.length; i++) {dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}return dp[cost.length];}
}

学习时间:

2024.4.23


http://www.ppmy.cn/ops/10961.html

相关文章

b站江科大stm32笔记(持续更新)

b站江科大stm32笔记&#xff08;持续更新&#xff09; 片上资源/外设引脚定义表启动配置推挽开漏oc/od 门漏极/集电极 电阻的上拉下拉输入捕获输入捕获通道主从触发模式输入捕获基本结构PWMI基本结构PWMPSC ARR CRR输入捕获模式测频率TIM_PrescalerConfig()初始化输入捕获测频法…

刷题训练之二分查找

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握二分查找算法 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

部署后端常见问题:更换JDK版本

目录 #步骤一&#xff1a;创建相关目录用于安装JDK #步骤二&#xff1a;安装JDK17版本&#xff1a; 附&#xff1a; JDK8下载&#xff1a; JDK1.8下载&#xff1a; #步骤三&#xff1a;解压同时重命名文件&#xff1a; #步骤四&#xff1a;编辑文件设置环境变量 原本代…

ffmpeg截图(关键帧截图)

1.rtsp流截图 ffmpeg --stimeout 1000000 -rtsp_transport tcp -i rtsp://xxx -vf selecteq(pict_type,PICT_TYPE_I) -vsync vfr -ss 00:00:00.000 -vframes 1 -s 640x480 -y output.jpg -hide_banner参数解释&#xff1a; ● -stimeout 1000000&#xff1a;设置socket超时时间…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;1&#xff09; 段子手168 1、微服务的注册中心 注册中心可以说是微服务架构中的”通讯录”&#xff0c;它记录了服务和服务地址的映射关系。 在分布式架构中服务会注册到这里&am…

HCIP——HCIA回顾(笔记)

OSI OSI -- 开放式系统互联参考模型&#xff08;7层参考模型&#xff09; 应用层 抽象语言 -》编码 表示层 编码-》二进制 会话层 提供应用程序的会话地址 传输层 分段 数据包容量不易过大&#xff0c;否则影响传输效率及共享宽带&#xff1b;分段大小由MTU决定&…

【React Router】初识路由(下)

Form 普通搜索框的表单提交 <form id"search-form" role"search"><inputid"q"className{searching ? "loading" : ""}aria-label"Search contacts"placeholder"Search"type"search&qu…

Vision Mamba 环境安装 运行笔记

环境描述 ubuntupytorch 2.1 和配套的torchvision torchaudiocuda 12.1python 3.10 安装causal-conv1d 参考复现U-Mamba。下载whl包&#xff0c;安装causal_conv1d1.1.0。具体而言&#xff0c; git clone http://github.com/Dao-AILab/causal-conv1d.git git checkout v1.1…