day38动态规划part01| 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

**理论基础 **

无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。
如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了?
其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要!
如果做过动态规划题目的录友,看我的理论基础 就会感同身受了。
题目讲解 | 视频讲解

动态规划中每一个状态一定是由上一个状态推导出来的这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,
例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。
动态规划中dp[j]是由dp[j-weight[i]]推导出来的,然后取max(dp[j], dp[j - weight[i]] + value[i])。
大家知道动规是由前一个状态推导出来的,而贪心是局部直接选最优的,对于刷题来说就够用了。

动态规划的解题步骤
对于动态规划问题,我将拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!

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

### **509. 斐波那契数 ** 很简单的动规入门题,但简单题使用来掌握方法论的,还是要有动规五部曲来分析。
[题目讲解](https://programmercarl.com/0509.%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0.html) | [视频讲解](https://www.bilibili.com/video/BV1f5411K7mo)

这道题比较简单

class Solution {
public:int fib(int n) {int nums[31] = {0};nums[0] = 0;nums[1] = 1;for (int i = 2; i <= n; i++) {nums[i] = nums[i - 1] + nums[i - 2];}return nums[n];}
};

**70. 爬楼梯 **

本题大家先自己想一想, 之后会发现,和 斐波那契数 有点关系。
题目讲解 | 视频讲解 | 力扣题目链接

  1. 确定dp数组和含义

dp[i]: 爬到第i层楼梯,有dp[i]种方法

  1. 确定递推公式

从dp[i]的定义可以看出,dp[i] 可以有两个方向推出来。
首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么。
还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,那么再一步跳两个台阶不就是dp[i]了么。
那么dp[i]就是 dp[i - 1]与dp[i - 2]之和!
所以dp[i] = dp[i - 1] + dp[i - 2] 。

  1. 初始化

题目说是正整,所以从1开始,显而易见

class Solution {
public:int climbStairs(int n) {// 1. 确定dp数组(dp table)以及下标的含义int dp[46] = {0};   // 爬到i层有几种方法// 2. 确定递推公式// 当前这一层,可以从i-1层走一次,也可以从i-2层走一次// dp[i] = dp[i - 1] + dp[i + 2];// 3. dp数组如何初始化dp[1] = 1;dp[2] = 2;// 4. 确定遍历顺序for (int i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];// 5. 举例推导dp数组}
};

**746. 使用最小花费爬楼梯 **

这道题目力扣改了题目描述了,现在的题目描述清晰很多,相当于明确说 第一步是不用花费的。
更改题目描述之后,相当于是 文章中 「拓展」的解法
题目讲解 | 视频讲解

  1. 确定dp数组以及下标的含义

使用动态规划,就要有一个数组来记录状态,本题只需要一个一维数组dp[i]就可以了。
dp[i]的定义:到达第i台阶所花费的最少体力为dp[i]
对于dp数组的定义,大家一定要清晰!

  1. 确定递推公式

可以有两个途径得到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]);

这里确定递推公式的时候,一定要想着当前的dp[i]可以如何通过之前的状态转换过来

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {// 根据题目的描述:第一次跳上0或1下标是不耗费体力的// 要到达楼梯顶部,所以要比cost.size()大一阶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[dp.size() - 1];}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TB作品】MSP430G2553,单片机,口袋板, 烘箱温度控制器

题3 烘箱温度控制器 设计一个基于MSP430的温度控制器&#xff0c;满足如下技术指标&#xff1a; &#xff08;1&#xff09;1KW 电炉加热&#xff0c;最度温度为110℃ &#xff08;2&#xff09;恒温箱温度可设定&#xff0c;温度控制误差≦2℃ &#xff08;3&#xff09;实时显…

如何创建一个vue项目

目录 1.环境准备 2.检查node和npm版本&#xff0c;确定已安装nodejs 3.全局安装vue/cli、webpack、webpack-cli、vue/cli-init 4.检查vue版本,注意V是大写 5.创建vue项目 6.得到的vue项目目录结构如下&#xff1a; 1.环境准备 安装nodejs,或者安装nvm&#xff0c;并使用…

0101git服务器本地下载gogs源码-其他-版本管理

文章目录 1前言2操作3 建议 结语 1前言 公司接手维护甲方的项目&#xff0c;项目部署在阿里云服务器。但是甲方能提供的文档资料很有限&#xff0c;如果通过甲方去找之前开发项目的公司呢&#xff0c;首先很麻烦&#xff0c;然后也不一定能找到想要的项目源码。 然后项目4个主…

记录一次CMS的代码审计

本次代码审计使用了白加黑的手法&#xff0c;用黑盒的视角测试功能点&#xff0c;用白盒的方式作为验证。 0x1 XSS guestbook处&#xff0c;可以看到有一个留言板 idea搜索guestbook。发现代码如下&#xff0c;其中的getModel是获取数据的方法。Guestbook.class就是具体要获取…

Java源码解读之常量52429

文章目录 为什么有52429的常量呢&#xff1f;对于为什么选择52429?那么为什么不再选几位呢&#xff1f; 在JDK8源码中 java.lang.Integer有52429作为常量出现&#xff0c; 为什么有52429的常量呢&#xff1f; static void getChars(int i, int index, char[] buf) {int q, r;…

zkWASM:ZK+zkVM的下一站?

1. 引言 ZK技术具备极大通用性&#xff0c;也帮助以太坊从去中心化投资走向去信任化的价值观。“Don’t trust, Verify it!”&#xff0c;是ZK技术的最佳实践。ZK技术能够重构链桥、预言机、链上查询、链下计算、虚拟机等等一系列应用场景&#xff0c;而通用型的ZK协处理器就是…

【Docker】镜像

目录 1. 镜像拉取 2. 镜像查询 3. 镜像导出 4. 镜像上传 5. 镜像打标签 6. 镜像上推 7. 镜像删除 8. 镜像运行及修改 8.1 在registry 节点运行 mariadb 镜像&#xff0c;将宿主机 13306 端口作为容器3306 端口映射 8.2 查看容器ID 8.3 进入容器 8.4 创建数据库xd_d…

使用 onnxruntime-gpu 进行推理,运行时间久显存逐渐递增无法减少

背景 将 pytorch / tensorflow 模型转换为onnx后&#xff0c;推理速度相对变快。但是问题在于当请求量增加&#xff0c;onnx模型会无限制申请GPU资源。如果将onnx模型部署为一个接口&#xff0c;则这个接口会一直存在&#xff0c;申请的GPU资源也不会得到释放&#xff08;详细可…

SK Hynix 3D DRAM良率突破56.1%,开启存储新时代

根据韩国财经媒体Business Korea独家报道&#xff1a;在刚刚结束的VLSI 2024国际研讨会上&#xff0c;韩国半导体巨头SK Hynix公布了一项振奋人心的进展&#xff1a;其五层堆叠3D DRAM的制造良率已达到56.1%。此成果标志着3D DRAM技术在商业化道路上迈出了坚实的一步&#xff0…

mybatisplus多条件对象xml分页查询

不要用它自带的 selectPage方法&#xff0c;会有传参问题 controller import java.util.Set;RestController RequiredArgsConstructor RequestMapping("/deviceInfo" ) public class DeviceInfoController {private final DeviceInfoService deviceInfoService;/**…

JUC 队列

常见的阻塞队列 Queue接口 public interface Queue<E> extends Collection<E> {//添加一个元素&#xff0c;添加成功返回true, 如果队列满了&#xff0c;就会抛出异常boolean add(E e);//添加一个元素&#xff0c;添加成功返回true, 如果队列满了&#xff0c;返回…

docker的容器操作命令

容器命令 容器是什么 镜像运行起来就是容器 docker run docker ps 查看运行的容器状态 docker ps -a 查看所有的容器状态&#xff08;包括未运行的&#xff09; docker logs 查看容器的日志 docker rm 删除容器 启动容器 docker start 镜像名称/镜像id 停止容器 docker stop …

大模型日报2024-06-26

大模型日报 2024-06-26 大模型资讯 大模型产品 Pygma&#xff1a;Instagram的AI助手 摘要: Pygma通过分析您的Instagram数据&#xff0c;提供7天的内容创意&#xff0c;并为您创建个性化内容&#xff0c;直接建议在界面中安排发布。 revid.ai&#xff1a;一站式短视频创作工具 …

sudo 权限之危险的 bash 命令

文章目录 [toc]事出有因干就完事了创建用户配置 sudo 权限sudo 验证使用 bash 命令执行 chmod 命令使用 bash 命令执行删根 事出有因 使用普通用户安装 tidb 时&#xff0c;发现报错了&#xff0c;报错内容如下&#xff1a; ERROR SSHCommand {"host": "…

三十九篇:UML与SysML:掌握现代软件和系统架构的关键

UML与SysML&#xff1a;掌握现代软件和系统架构的关键 1. 引言 1.1 为什么系统设计如此关键 在当今快速发展的技术环境中&#xff0c;系统设计的重要性不言而喻。无论是软件开发还是复杂的系统工程&#xff0c;良好的设计是确保项目成功的基石。系统设计不仅关系到功能的实现…

【Windows】Windows 10 + PowerToys 快捷键

1、Windows 10 快捷键2、PowerToys 快捷键2.1、始终置顶2.2、颜色选择器2.3、打开FancyZones编辑器2.3.1、FancyZones编辑器编辑布局2.3.2、将窗口放置到指定区域 2.4、鼠标实用工具2.4.1、查找我的鼠标2.4.2、启用/关闭鼠标荧光笔2.4.3、启用/关闭鼠标跳转2.4.4、 启用/关闭鼠…

Spring统一功能

文章目录 一、什么是统一功能二、拦截器2.1 什么是拦截器2.2 拦截器的使用2.3 案例&#xff1a;不拦截前端的请求2.4 拦截器是如何实现的 ---- >分析DispatcherServlet源码分析 三、适配器模式四、统一数据返回格式五、统一异常六、案例&#xff1a;在图书管理系统使用统一功…

【自然语言处理】GPT-5技术突破预测:引领自然语言处理革新的里程碑

摘要 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;领域正迎来一场前所未有的革命。近日&#xff0c;OpenAI首席技术官米拉穆拉蒂在采访中透露&#xff0c;新一代大语言模型GPT-5将在一年半后发布&#xff0c;这一消息无疑在科技界掀起了巨大的波澜。GPT-…

【Linux】锁|死锁|生产者消费者模型

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ ​ 访问互斥 …

Linux中--prefix命令使用及源码安装

1.prefix - 指定文件安装路径通常与configure搭配使用&#xff1a; 在安装源码时可使用下述命令指定源码安装路径&#xff1a; bogon:httpd-2.4.59 wancanchishenma$./configure --prefix/usr/local/apache 2.源码的安装一般由3个步骤组成&#xff1a;配置&#xff08;configur…