使用最小花费爬楼梯 | 动态规划

news2024/7/6 18:12:57
1.使用最小花费爬楼梯

题目连接:746. 使用最小花费爬楼梯
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。

2.题目解读在这里插入图片描述

例如上面的例子,从下标为0的地方开始爬楼梯,向上爬一个或者两个台阶,最后到达顶部,输出6。其实两个问题,就是我怎么知道从0下标还是1下标开始?我怎么知道是要爬一个还是两个台阶?

3.解决问题(解法一)

(1)、状态表示
上面的问题1,我怎么知道从0下标还是1下标开始?只需要定义dp[i]为到达 i 位置时的最⼩花费即可。 如:dp[3]根据以往的计算这个就是最小花费,至于从0还是1下标,那就要问,dp[0]和dp[1]的最小花费是多少。
(2)、状态转移⽅程
根据以往的推出的结果(dp[i]之前或之后),来推导dp[i]。这里根据题目推导状态转移方程,即可解决知道是要爬一个还是两个台阶(最优即:最小花费)。
在这里插入图片描述
(3)、初始化
dp[0] = dp[1] = 0本来就可以在0或1下标。
(4)、初始化顺序
这里根据题目要求,根据状态转移方程,从左往右,将dp填充。
(5)、返回值
返回dp[n]即为,返回结果。

4.参考代码(解法一)

C++版本:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) 
    {
        int n = cost.size();
        vector<int> dp(n + 1);

        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];
    }
};

Java版本:

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int n = cost.length;
        int dp[] = new int[n + 1];

        for(int i = 2;i <= n;i++){
            dp[i] = Math.min(cost[i - 1] + dp[i - 1],cost[i - 2] + dp[i -2]);
        }
        return dp[n];
    }
}
5.解决问题(解法二)

(1)、状态表示
dp[i]表示到达楼梯顶部的最少花费。
(2)、状态转移⽅程
在这里插入图片描述

(3)、初始化
dp[n -1] = cost[n-1],dp[n-2] = cost[n-2]
(4)、初始化顺序
这里根据题目要求,根据状态转移方程,从右往左,将dp填充。
(5)、返回值
返回min(dp[0],dp[i])就是结果

6.参考代码(解法二)

C++版本:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) 
    {
        int n = cost.size();
        vector<int> dp(n + 1);

        dp[n - 1] = cost[n - 1];
        dp[n - 2] = cost[n - 2];

        for(int i = n - 3;i >= 0;i--)
        {
            dp[i] = min(cost[i] + dp[i + 1],cost[i] + dp[i + 2]);
        }

        return min(dp[0],dp[1]);
    }
};

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

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

相关文章

K210视觉识别模块学习笔记3:内存卡写入拍摄图片_LED三色灯的操作_按键操作_定时器的配置使用

今日开始学习K210视觉识别模块: LED三色灯的操作_按键操作_定时器的配置使用_内存卡写入拍摄图片 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 本文最终目的是编写一个按键拍照的例程序&#xff1a; 为以后的专用场景的模型训练做准备&#xf…

2024050402-重学 Java 设计模式《实战责任链模式》

重学 Java 设计模式&#xff1a;实战责任链模式「模拟618电商大促期间&#xff0c;项目上线流程多级负责人审批场景」 一、前言 场地和场景的重要性 射击&#x1f3f9;需要去靶场学习、滑雪&#x1f3c2;需要去雪场体验、开车&#x1f697;需要能上路实践&#xff0c;而编程…

【python】OpenCV—Bitplane

学习来自&#xff1a; 位平面分割&#xff08;Bit-Plane Slicing&#xff09;使用OpenCVPython进行图像处理的初学者指南 位平面 位平面&#xff08;bitplane&#xff09;是一个在计算机科学中用于描述图像数据的概念&#xff0c;具体定义如下&#xff1a; 【定义】&#x…

vue3之拆若依--记实现后台管理首页(左侧菜单栏、头部信息区域...)

效果图 前期准备 启动若依在本地 启动若依后台,跑在自己本地: 这里对于如何下载若依相关的前后端代码请参考若依官网:RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-…

CSS学习笔记之高级教程(五)

23、CSS 媒体查询 - 实例 /* 如果屏幕尺寸超过 600 像素&#xff0c;把 <div> 的字体大小设置为 80 像素 */ media screen and (min-width: 600px) {div.example {font-size: 80px;} }/* 如果屏幕大小为 600px 或更小&#xff0c;把 <div> 的字体大小设置为 30px …

数据虚拟化:零数据搬运,实现全域数据的集成和自适应加速

数据虚拟化技术的兴起&#xff0c;与传统数据仓库体系的弊端日益显现有着密切关系。 过去&#xff0c;企业通常会构建数据仓库来存储与加工结构化数据。数据仓库虽然实现了数据的物理集中存储&#xff0c;但过于依赖大量的 ETL 工程师来支持数据的集成、准备、开发与管理。随着…

SEATA如何起步

https://seata.apache.org/zh-cn/https://seata.apache.org/zh-cn/ seata官网网址 Seata术语:(具体看官网) 具体SEATA有几种模式: TCC , AT(即自动模式): 因为 , 事务已经提交 , 肯定无法 回滚 , 所以TCC模式是需要自己自己写补偿代码, AT则是需要一份UNDO_LOG 表 来告诉AT模…

DxO ViewPoint v4.16 解锁版安装教程 (校正几何和透视的图像处理)

前言 DxO ViewPoint中文版是一款能够校正几何和透视的图像处理软件,摄影师通过ViewPoint破解版修复构图和光学缺陷并恢复拍摄对象平衡,重新调整如弯曲架构和扭曲图案等细节,让图像具备更强冲击力和更优平衡性。 一、下载地址 下载链接&#xff1a;http://dygod/source 点击搜…

智能交通SCI期刊,中科院2区,IF=7.9,国产期刊,影响力高,口碑佳

一、期刊名称 Digital Communications and Networks 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;智能交通 影响因子&#xff1a;7.9 中科院分区&#xff1a;2区 三、期刊征稿范围 《数字通信与网络》与科爱出版社和重庆邮电大学合作出版季刊&#xf…

关于Stream.toList()方法使用小记

对照示例 public static void main(String[] args) {final List<String> list new ArrayList<>();list.add("aa");list.add("bb");list.add("cc");list.remove("cc");System.out.println(list);}结果&#xff1a; Stre…

SAS:import进来的excel数据集中的空格无法去除

目的&#xff1a;如果去除ECGTPT中的空格&#xff1f; 尝试&#xff1a;用compress函数或者strip无法去除正解&#xff1a;kcompress(ecgtpt,0d’x);释疑&#xff1a; 中间空的地方不是空格&#xff0c;是换行符。因数据集是UTF-8编码&#xff0c;还需要用kcompress替换compres…

详解 Flink 的运行架构

一、组件 1. JobManager 作业管理器是一个 Flink 集群中任务管理和调度的核心&#xff0c;是控制应用执行的主进程 1.1 JobMaster JobMaster 是 JobManager 中最核心的组件&#xff0c;负责处理单独的作业&#xff08;Job&#xff09;。JobMaster 和具体的 Job 是一一对应的&…

rpm安装

rpm安装 命令格式&#xff1a; rpm 【选项】 文件名 选项&#xff1a; -i&#xff1a;安装软件 -v:显示安装过程信息 -h:用#表示安装进度&#xff0c;一个#代表2% -ivh&#xff1a;安装软件&#xff0c;显示安装过程 -e:卸载软件 -q:查看软件是否安装 -ql&#xff1…

码农危是否到来? AI大模型时代到来程序员能做啥?

前言 “马斯克提到人工智能会让工作变得毫无意义&#xff0c;并建议人们可能需要去编写人工智能程序&#xff0c;以避免被AI剥夺就业”&#xff0c;AI大模型的爆发&#xff0c;各种自动化编码应用工具&#xff0c;AI机器人出现&#xff0c;“前有2023年2月份&#xff0c;ChatG…

「实战应用」如何用图表控件LightningChart JS创建SQL仪表板应用(一)

LightningChart JS是Web上性能特高的图表库&#xff0c;具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用&#xff0c;从而实现高刷新率和流畅的动画&#xff0c;常用于贸易&#xff0c;工程&#xff0c;航…

Polar Web【简单】php very nice

Polar Web【简单】php very nice Contents Polar Web【简单】php very nice思路EXP运行&总结 思路 打开网页源代码&#xff0c;由下图的代码&#xff0c;可见本题涉及到反序列化以及变量覆盖。 因此考虑传递GET参数a来构造序列字符串。 由上图中的代码&#xff0c;在Exampl…

8.7k Star!Khoj:你的AI第二大脑、开源RAG Cop​​ilot、平替 MS Copilot与ChatGPT

原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; 8.7k Star&#xff01;Khoj&#xff1a;你的AI第二大脑、开源RAG Cop​​ilot、平替 MS Copilot与ChatGPT &#x1f31f;你的AI第二大脑。…

Splatter Image: Ultra-Fast Single-View 3D Reconstruction

Splatter Image: Ultra-Fast Single-View 3D Reconstruction 飞溅图像&#xff1a;超快速单视图3D重建 Stanislaw Szymanowicz  Christian Rupprecht  Andrea Vedaldi 克里斯蒂安鲁普雷希特安德烈韦达尔迪 Visual Geometry Group — University of Oxford {stan,chrisr,vedal…

优卡集团冲刺港股上市:90后创始团队孵化,IPO前突击大额分红

现年26岁的鲁圳&#xff0c;正在带领其6年以来的创业成果冲击资本市场。 近日&#xff0c;金融居间机构服务商优卡集团&#xff08;Yoc Group&#xff09;向港交所递交上市申请&#xff0c;民银资本为其独家保荐人。透过招股书可知&#xff0c;优卡集团成立于2018年&#xff0…

自动化测试-Selenium(一),简介

自动化测试-Selenium 1. 什么是自动化测试 1.1 自动化测试介绍 自动化测试是一种通过自动化工具执行测试用例来验证软件功能和性能的过程。与手动测试不同&#xff0c;自动化测试使用脚本和软件来自动执行测试步骤&#xff0c;记录结果&#xff0c;并比较预期输出和实际输出…