【学会动态规划】使用最小花费爬楼梯(3)

目录

 

动态规划怎么学?

1. 题目解析

2. 算法原理

1. 状态表示

2. 状态转移方程

3. 初始化

4. 填表顺序

5. 返回值

3. 代码编写

写在最后:


动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

题目链接:746. 使用最小花费爬楼梯 - 力扣(Leetcode)

 老规矩,我们先来分析一下题目,

题目要求计算返回到达楼顶的最低费用,我们先来看看第一个示例,

可以看到他返回的是15,证明15能一步走到楼顶而10不能,

我们由此可以推出,楼顶是超出数组的后一个位置,

知道了这个,题意就基本上理解了。

2. 算法原理

1. 状态表示

根据之前的学习我们已经知道该怎么分析状态表示了,

就是 dp[ i ] 位置表示什么,或者说怎么表示 dp [ i ],根据题目要求,

dp[ i ] 就是到达 i 位置的最小花费。

2. 状态转移方程

推导状态转移方程的技巧其实就是,用之前或者之后的状态,推导出 dp[ i ] 的值。

根据最近的一步划分问题,就好像这道题目,

而最近的一步有两种情况,

1. 从 dp[ i - 1 ] 走一步过来,支付cost[ i - 1 ] 的费用;  

2. 从 dp[ i  - 2 ] 走两步过来,支付cost[ i - 2 ] 的费用。

而 dp[ i ] 就是到达 i 位置的最小花费,

那我们就能得出状态转移方程:

dp [ i ] = min( dp[ i - 1 ] + cost[ i - 1 ],dp[ i - 2 ] + cost[ i - 2 ] )

3. 初始化

初始化时为了填表的时候不越界。

所以我们需要初始化的就是 dp[ 0 ] 和 dp[ 1 ]。

dp[ 0 ] = dp[ 1 ] = 0。

4. 填表顺序

填表顺序这次还是从左往右。

5. 返回值

因为我们需要到达楼顶,也就是数组后一个位置,所以应该返回的是 dp[ n ]。

3. 代码编写

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int size = cost.size();// 创建dp表,这样初始化默认填充的是 0 vector<int> dp(size + 1);// 填表for(int i = 2; i <= size; i++) {dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}// 返回结果return dp[size];}
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

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

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

相关文章

开源免费的多数据库工具Chat2DB

Chat2DB v1.0.11使用 当前使用的版本为1.0.11&#xff0c;目前已经更新到2.0.1版本。 一.Chat2DB介绍 Chat2DB 是一款开源免费的多数据库客户端工具。 能够将自然语言转换为SQL&#xff0c;也可以将SQL转换为自然语言。 支持windows、mac本地安装&#xff0c;也支持服务器端…

Redis 从入门到精通【进阶篇】之高可用哨兵机制(Redis Sentinel)详解

文章目录 0.前言1. 原理详解1.1. 哨兵机制的组建1.1. 哨兵是如何知道从库的信息 1.2. 主库下线的判定1.3. 哨兵集群选举1.4. 故障的转移 2. 总结3. Redis从入门到精通系列文章4. Redis哨兵模式面试题4. 1. 什么是Redis的哨兵模式&#xff1f;4. 2. 哨兵模式的优点是什么&#x…

TinyML4.3.3 拆分数据

将TinyML4.3.2 生成数据(Create Sin)文章中创建的1000个样本点数据拆分为训练集、验证集、测试集&#xff0c;其中训练集占60%&#xff0c;验证集占20%&#xff0c;测试集占20%。 新建一个cell&#xff0c;编辑代码&#xff1a; #Well use 60% of our data for training and …

ADManager Plus:企业自动化管理的利器

在当今数字化时代&#xff0c;企业管理面临着越来越多的挑战。为了提高效率、降低成本并确保信息安全&#xff0c;自动化管理成为了企业的首要选择。而在众多自动化管理工具中&#xff0c;ADManager Plus无疑是一款卓越的解决方案。本文将为您介绍ADManager Plus的功能与优势&a…

【QT/OpenCV】QT实现张正友相机标定

相机标定 01、相机标定02、OpenCV函数及其张正友标定法2.1、相机标定步骤2.2、相机标定相关函数2.2.1 提取角点--- findChessboardCorners2.2.2 亚像素角点提取1--- find4QuadCornerSubpix2.2.3 亚像素角点提取2--- cornerSubPix2.2.4 绘制内角点 --- drawChessboardCorners2.2…

微信小程序第六节——个体账号如何实现用户自定义内容

&#x1f4cc; 微信小程序第一节 ——自定义顶部、底部导航栏及获取胶囊位置信息。 &#x1f4cc; 微信小程序第二节 —— 微信小程序第二节 —— 自定义组件。 &#x1f4cc; 微信小程序第三节 —— 页面跳转的那些事儿。 &#x1f4cc; 微信小程序第四节 —— 网络请求那些事…

前端videojs实现m3u8格式的直播

一、安装 npm install --save-dev video.js 二、引入 import videojs from "video.js"; import "video.js/dist/video-js.css"; 三、template 由于此处客户需要全屏至指定框大小&#xff0c;而不是全屏整个屏幕所以没用插件自带的全屏控件 隐藏自带全屏…

利用 Elasticsearch、ESRE、LLM 和 LangChain 加速制药行业的研发 — 第 1 部分

作者&#xff1a;Valerio Arvizzigno, Dimitri Marx, Francesco Di Stefano 这是一篇通过生成式 AI/LLM、自定义模型和 Elasticsearch 相关性引擎 (ESRE​​) 支持制药行业更快的药物创新和发现的综合指南。更快的药物发现带来有前途的候选药物是制药行业的主要目标。 为了支持…

三、学习分类 - 基于图像大小进行分类

天下一半剑仙是我友 谁家娘子不娇羞 我以醇酒洗我剑 谁人说我不风流 1 设置问题 根据图片的尺寸&#xff0c;把图片分为纵向图像和横向图像。这种把图像分成两种类别的问题&#xff0c;就是二分类问题。 纵向图片示例&#xff1a; 横向图片示例&#xff1a; 这样就有了两个…

jmeter列表数据断言

在jmeter接口请求中&#xff0c;通常需要根据接口data列表有无返回的数据断言是接口请求成功&#xff0c;如图1&#xff0c; 通常有这么几种方法&#xff1a; beanshell断言 json断言 响应断言 图1&#xff1a; 失败请求&#xff1a;{"code":0,"msg"…

Android自动化测试之Monkey

目录 一、Monkey与Android SDK之间的关系 二、环境配置 三、正式测试 四、报错分析 五、总结 本来是做Web后端的&#xff0c;来公司实习变成微信小程序前端了&#xff0c;到这周变成Android APP测试人员了&#xff0c;也是微醺啊。 由于对手工测试终究是有些抵触&#xff…

OpenCV 入门教程: Sobel算子和Scharr算子

OpenCV 入门教程&#xff1a; Sobel 算子和 Scharr 算子 导语一、Sobel 算子二、Scharr 算子三、示例应用3.1 图像边缘检测3.2 边缘增强 总结 导语 在图像处理和计算机视觉领域&#xff0c;边缘检测是一项重要的任务。 Sobel 算子和 Scharr 算子是两种常用的边缘检测算子&…