【动态规划算法】第三题:746.使用最小花费爬楼梯

news2024/11/26 4:47:55

💖作者:小树苗渴望变成参天大树
🎉作者宣言:认真写好每一篇博客
🎊作者gitee:gitee
💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法
在这里插入图片描述
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!

文章目录

  • 前言


前言

今天我们开始讲解动态规划的第三题,难度上有一点小提升,不太很好理解,这题目有两种解题办法,博主都会使用动态规划的五个步骤给大家进行讲解,我们来看下面的正文


第二个题目是使用最小花费爬楼梯
在这里插入图片描述

解法一:(以i为到达点,通过前面的费用来推后面的)
图解:
在这里插入图片描述
通过动态规划的五个步骤解题:

  1. 状态表示:创建一个dp表,根据经验以i位置为到达点,即到达第i个台阶需要花费的最小费用为dp[i](注意:i位置的费用不用计算,只有往上走才需要算)。 根据图解,就是当i=2时,到达第二阶台阶所花费的最小费用为dp[i]
  2. 状态转移方程:以离此状态最近的状态来研究两者的关系。到达第i的位置时,最近时先到达i-1的位置或者到达i-2的位置,来算算两者谁到达i位置的费用最低,通过状态表示,dp[i]表示到达i位置的最小费用,
    (1)那么从i-1的位置到达i位置的最小费用为dp[i-1]+往上爬一步所需的费用为cost[i-1]。 dp[i]=dp[i-1]+cost[i-1]
    (2) 同理,那么从i-2的位置到达i位置的最小费用为dp[i-2]+往上爬两步所需的费用为cost[i-2]。 dp[i]=dp[i-2]+cost[i-2]
    所以状态转移方程为两者最小的:dp[i]=min(dp[i-1]+cost[i-1],dp[i]=dp[i-2]+cost[i-2])
  3. 初始化:保证数组不越界,出现i-1和i-2,所以dp[0],dp[1]要初始化从dp[2]开始算,根据题目要求,到达第0阶或者到达第1阶不需要费用,所以dp[0]=dp[1]=0;
  4. 填表顺序:从左往右
  5. 返回值,根据题目要求和状态表示,dp[n]就是到达第n阶台阶的最小费用

代码实现:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n=cost.size();//计算cost数组的大小
        //1.创建dp表
        vector<int> dp(n+1);//vector默认给数组的初始化就是0
        for(int i=2;i<=n;i++)
        {
           dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
           
        }
        return dp[n];//返回值

    }
};

解法二:(以i位置为出发点,到达楼顶的最小费用,通过后面来推前面)
图解
在这里插入图片描述
通过动态规划的五个步骤解题:

  1. 状态表示:根据解法一,创建一个dp表,以i位置为出发点,dp[i]表示:从i位置到达楼顶的最小费用。因为从n-1h和n-2位置开始到楼顶的最小费用是直接可以得出来的,第n个位置的费用就可以不用计算了,所以dp表的大小和原数组大小一样即可
  2. 状态转移方程:通过状态表示第i位置到达了,楼顶的最小费用为dp[i],从i位置出发,想要到达楼顶,右两种方式
    (1)先支付cost[i],往后面走一步,到达i+1的位置,i+1到达楼顶的最小费用是知道的为dp[i+1],所以从i位置到达楼顶的费用为dp[i]=dp[i+1]+cost[i]
    (2)同理,先支付cost[i],往后面走两步,到达i+2的位置,i+2到达楼顶的最小费用是知道的为dp[i+2],所以从i位置到达楼顶的费用为dp[i]=dp[i+2]+cost[i]

所以从i位置到达楼顶的最小费用为dp[i]=min(dp[i+1]+cost[i],dp[i+2]+cost[i])
3. 初始化:保证数组不越界,可以楼顶到前一步或者前两部达到楼顶的最低费用为dp[n-1]=cost[n-1],dp[n-2]=cost[n-2]
4. 填表顺序:从右往左
5. 返回值:我们是从后面往前面推,一开始出发右两种方式,就是从0阶或者1阶出发,比较两者谁的费用最小即可,即返回min(dp[0],dp[1]);

代码实现:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n=cost.size();//计算cost数组的大小
        //1.创建dp表
        vector<int> dp(n);//vector默认给数组的初始化就是0
        if(n==0||n==1)return 0;
        dp[n-1]=cost[n-1];//初始化
        dp[n-2]=cost[n-2];
        for(int i=n-3;i>=0;i--)
            dp[i]=min(dp[i+1]+cost[i],dp[i+2]+cost[i]);//状态转移方程

        return min(dp[0],dp[1]);//返回值
    }
};

运行结果:
在这里插入图片描述

今天的动态规划第三题就讲解结束了,大家是不是感觉难度有所提升,博主也是想了一会,才尽可能用大家理解的方式把细节将出来,希望大家明白,不懂的可以评论区留言哦,我们下道题目再见
在这里插入图片描述

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

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

相关文章

能代替纸质笔记本的记录软件哪个好?

在很长一段时间里&#xff0c;纸质笔记本一直是我们记录信息的常用工具。然而随着记录需求的不断增加&#xff0c;纸质笔记本也暴露了一些不足之处。首先&#xff0c;它们的存储容量有限&#xff0c;很难管理大量的笔记。其次&#xff0c;如果纸质笔记本遗失或损坏&#xff0c;…

上门家政小程序|上门保洁APP|家政服务预约上门软件开发

上门家政小程序对于上门保洁服务非常方便。下面是一些简单介绍&#xff1a;   预约便捷&#xff1a;通过上门家政小程序&#xff0c;用户可以随时随地进行保洁服务的预约。无论是在家中、办公室还是旅途中&#xff0c;用户只需打开小程序&#xff0c;选择合适的日期和时间&am…

zabbix基础1——发展起源、基础安装、配置文件参数释义

文章目录 一、基本了解二、配置文件详解2.1 服务端配置文件2.2 客户端配置文件 三、源码安装3.1 安装服务端3.2 配置web前端文件3.3 访问网页 一、基本了解 前提背景&#xff1a; Zabbix是一个企业级分布式开源监控解决方案&#xff0c;由 Alexei Vladishev 创建&#xff0c;目…

gitee配置ssh公钥免密登录

如下配置&#xff0c;即可让本电脑直接推送gitee&#xff0c;而无需输入码云的密码 下载git配置用户名&#xff1a;git config --global user.name “zhangsan” //以后的提交人就是这个名字配置邮箱&#xff1a;git config --global user.email “zhangsanqq.com” //注册账号…

C# 在控制台整齐的输出 DataTable

效果: 一、前言 在 Winform 平台,可以用 DataGridView 这样的控件来显示数据库的表单数据,但在 C# 控制台项目中,如果有用到数据库查询,我们想看看查询语句的效果,就比较困难了,比如,我随意写了一个控制台输出,代码如下: using System.Data;namespace CSharpConnec…

使用 Elasticsearch

了解如何创建索引&#xff0c;添加&#xff0c;删除&#xff0c;更新文档 参考文档 开始使用 Elasticsearch 1 本文用到Elasticsearch和Kibana 可以看之前的两篇先安装好 Elasticsearch 安装 Kibana安装 Elasticsearch 里的接口都是通过 REST 接口来实现的。 GET 读取数…

matlab——制作箱线图

在数据分析中&#xff0c;如果不知道数据分布的情况下很难判断中位数是否有效或者存在离群点。 离群点指偏离大多数点规律的点。 为了更有效对整体数据进行划分&#xff0c;提出四分位点的概念。即选取概念下界、0.25位点、0.75位点、概念上界。 有一种专门表现四分位点的图像叫…

@Import注解源码解析

文章目录 一、简介二、Import注解的几种用法三、Import注解源码解析1、ConfigurationClassPostProcessor2、ConfigurationClassPostProcessor 类的 postProcessBeanDefinitionRegistry 方法3、ConfigurationClassParser 类的 parse 方法4、处理 ImportBeanDefinitionRegistrar …

C++实现打包工具代码框架+多种设计模式以及C++特性(附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、打包工具二、packtool框架前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于工作实践。 专栏介绍:专栏讲本人近…

沟通漏斗模型

沟通漏斗模型 沟通漏斗理论|是指信息在用语言这种形式&#xff0c;传递在过程中&#xff0c;逐渐衰减的现象。 模型介绍 「沟通漏斗模型」很多时候你说出来的≠别人听到的&#xff01;对沟通者来说&#xff0c;如果心里想的是100%的信息&#xff0c;受限于语言表达的技巧&…

海康威视(Hikvision) 摄像头-CVE-2017-7921漏洞复现

漏洞描述 许多HikvisionIP摄像机包含一个后门&#xff0c;允许未经身份验证的模拟任何配置的用户帐户。 漏洞复现 访问漏洞url 检索用户与用户列表 ttp://your-ip/Security/users?authYWRtaW46MTEK 从下图可知该摄像只有admin一个账户 获取监控快照 http://your-ip/onvif…

北京阿里云代理商:阿里云CDN流量包的价格和流量消耗计算?

标题&#xff1a;阿里云CDN流量包的价格和流量消耗计算&#xff1f;成本控制策略 本文由阿里云代理商[上海聚搜信息技术有限公司] 撰写。 面对企业或个人用户在使用阿里云CDN进行内容分发时&#xff0c;常常会有一个疑问&#xff0c;那就是如何计算阿里云CDN流量包的价格以及流…

社区底商需要加入团购?社区团购的运营到底应该怎么做?

社区团购作为越来越多社区底商老板的“副业”的模式&#xff0c;社区团购为门店带来的巨大盈利增长点&#xff0c;但传统门店盈利单一、客流有限等问题依然严重&#xff0c;门店改牌也是迟早的事情。 对于传统门店来说&#xff0c;生死存亡下想要转型线上&#xff0c;往往面临开…

TCP之延时Nagle算法实验详解

TCP/IP协议中&#xff0c;无论发送多少数据&#xff0c;总是要在数据前面加上协议头&#xff0c;同时&#xff0c;对方接收到数据&#xff0c;也需要发送ACK表示确认。为了尽可能的利用网络带宽&#xff0c;TCP总是希望尽可能的发送足够大的数据。&#xff08;一个连接会设置MS…

系统盘崩溃挂盘进入救援模式选择continue无法进入

问题&#xff1a; 系统盘崩溃挂盘进入救援模式选择continue无法进入&#xff0c;始终读码或者黑屏。 原因&#xff1a; 出现这个界面一般是在选择 "1 Continue" 后&#xff0c;某些文件系统没有成功 mount导致 解决方法&#xff1a; 再次进入救援模式&#xff0c…

(五)人工智能应用--深度学习原理与实战--Linux系统Tensorflow平台搭建

作为使用最广泛的深度学习框架,TensorfLow支持Windows、Linux、MacOs等多种操作系统。Linux系统作为服务器部署环境十分常见&#xff0c;本章我们将学习在Linux操作系统下Tensorflow的安装及基于NVIDIA GPU的Cuda(GPU并行计算框架)、cudnn(深度学习加速平台)的安装配置。 主要…

CV多模态和AIGC的原理解析:从CLIP、BLIP到Stable Diffusion、Midjourney

前言 终于开写本CV多模态系列的核心主题&#xff1a;stable diffusion相关的了&#xff0c;为何执着于想写这个stable diffusion呢&#xff0c;源于三点 去年stable diffusion和midjourney很火的时候&#xff0c;就想写&#xff0c;因为经常被刷屏&#xff0c;但那会时间错不…

Apache组件POI,勾选导出Excel文件。

如果对 POI组件、Maven依赖不了解的小伙伴&#xff0c;在观看本篇文章之前可以先观看我上一篇文章&#xff1a; Apache组件POI&#xff0c;将图片下载到Excel文件中并导出。 。 本篇文章主要讲解Excel文件如何实现勾选导出。 我们先看一下勾选导出时的入参参数&#xff0c;其中…

【调试】vscode远程连接服务器

概述 windows远程连接linux服务器进行操作&#xff0c;有多种方式。可以借助ssh客户端&#xff0c;MobaXterm&#xff0c;finalshell等&#xff0c;这两个我觉得是不错的软件。当然如果需要在服务器编写代码&#xff0c;我还是建议使用vscode这个神奇的工具。怎么用vscode远程…

Spring Boot 中的 TCC 事务

Spring Boot 中的 TCC 事务 在分布式系统中&#xff0c;事务一直是一个棘手的问题。传统的 ACID 事务无法满足分布式系统的需求&#xff0c;因为它们需要强一致性、单点故障和网络延迟等问题。近年来&#xff0c;随着微服务架构的普及&#xff0c;TCC 事务成为了一种非常流行的…