[动态规划] (三) LeetCode 746. 使用最小花费爬楼梯

LeetCode746使用最小花费爬楼梯(动态规划) 算法特点及适用场景该算法通过动态规划的思路,清晰地定义了状态和状态转移方程,有效地解决了在爬楼梯过程中求最小花费的问题。代码实现较为简洁直观,易于理解和维护。适用于具有类似最优子结构特性的问题,也就是一个问题的最优解可以由其子问题的最优解推导出来的场景,比如一些资源分配、路径选择等问题,只要能合理分析出状态和转移关系,都可以尝试运用动态规划来求解。注意事项及可能遇到的问题在使用动态规划解决此类问题时,关键在于准确地定义状态和推导状态转移方程,任何一处出现错误都可能导致最终结果不正确。 阅读详情

[动态规划] (三)LeetCode 746. 使用最小花费爬楼梯(两种解法)


746. 使用最小花费爬楼梯

image-20231102175300875

题目解析

(1) cost[i]数组是从i位置向上爬的费用

(2) 支付一次费用有两种选择:爬一次或者爬两次

(3) 可以从第0或1台阶开始爬

(4) 爬到顶楼需要的话费,从示例1可以看出,顶楼指的是cost.size。

解题思路

解法一:

状态表示

题目:最小花费

猜测:以i位置为结尾(大胆猜测,推导不出状态转移方程再重新猜)

dp[i]:题目+猜测= 到达i位置时的最小花费

状态转移方程

用i之前或者i之后的状态,推出dp[i]

到达i有两种可能:i-1爬一步,i-2爬两步

那dp[i]就是,到达i-1位置前的花费+当前位置的花费(i-1)或者是到达i-2位置前的话费+当前位置的花费(i-2)。

对它们两个取最小值即可。

dp[i] = min(cost[i-1]+dp[i-1], cost[i-2]+dp[i-2])
初始化和填表顺序

初始化:题目告诉我们,可以从0或者1位置开始,即dp[0] = dp[1] = 0。

填表顺序:避免越界,从左向右填

返回值

返回n位置即可,dp[n]

解法二:

状态表示

题目:最小花费

猜测:从i位置为起点

dp[i]:题目+猜测= 从i为起点到顶楼的最小花费

状态转移方程

以i为起点,有两种选择:到达i+1,再到顶楼或者到达i+2,再到顶楼

正好,我们的dp[i]是从i到顶楼的花费,所以

dp[i] = min(cost[i]+dp[i+1], cost[i]+dp[i+2])
初始化和填表顺序

初始化:我们要用的是i+1和i+2位置的值,最后是从n-1或者n-2到顶楼

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

填表顺序:我们这里是反着推导的,所以是从右往左填表的。

返回值

dp[i]表示的是从i位置开始到楼顶的最小花费,所以最后是返回dp[0]和dp[1]中小的那个即可。

代码实现

法一

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

image-20231102185253779

法二

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

image-20231102185357373

总结

细节:得出状态表示后,尝试推导状态转移方程。

使用最小花费爬楼梯力扣--746 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例 1:输入:cost = [10,15,20] 输出:15 解释:你将从下标为 1 的台阶开始。 - 支付 15 ,向上爬两个台阶,到达楼梯顶部。 总花费为 15 。 示例 2:输入:cost = [1,100,1,1,1,100,1,1,100,1] 输出:6 解释 阅读详情

相关推荐

安装VMware,出现没有虚拟网络适配器的问题

安装VMware,出现没有虚拟网络适配器的问题

Young_Harry的博客 1万+

算法学习——LeetCode力扣动态规划篇1(509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯、62. 不同路径、63. 不同路径 II)

算法学习——LeetCode力扣动态规划篇1(509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯、62. 不同路径、63. 不同路径 II)

拉依达不拉跨的博客 1876

Bertopic库安装(二)

Bertopic库安装

weixin_43392789的博客 4895

《C++ 动态规划》第003题:使用最小花费爬楼梯

本文介绍了LeetCode第746题"使用最小花费爬楼梯"的两种动态规划解法。第一种解法以位置i为终点,定义dp[i]为到达i位置的最小花费,状态转移方程为dp[i]=min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]),从左往右填表。第二种解法以位置i为起点,定义dp[i]为从i出发到终点的最小花费,状态转移方程为dp[i]=cost[i]+min(dp[i+1], dp[i+2]),从右往左填表。两种方法都给出了C++实现代码,时间复杂度均为O(n),空

心向往之,行必能至 1054

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 154

量化交易之因子分析大全

在机器学习项目中,特征工程是非常重要的。在量化研究中也是如此。本文将量化研究中常用到的特征,也就是因子进行详细收纳,并给出推导公式和实现代码。

夏之微风的博客 2285

一文搞懂从爬楼梯到最小花费(力扣70,746)

动态规划算法(Dynamic Programming)是一种解决多阶段决策过程最优化问题的方法。它将问题分解为相互重叠的子问题,并通过解决子问题来解决整个问题。这种方法通常用于具有重叠子问题和最优子结构性质的问题。动态规划的基本思想是将原问题分解为相互重叠的子问题,并在解决这些子问题时进行存储,以避免重复计算。通过这种方式,可以大大减少计算量,提高算法效率。动态规划算法通常涉及两个关键步骤:定义状态和状态转移方程。定义状态: 确定问题中的状态变量,并定义状态之间的关系。

Huahua_1223的博客 2478

基于CST的PCB通孔三维建模实例

本文简明扼要地描述了如何利用CST的参数化脚本快速生成PCB的通孔三维模型,非常适合于进行快速精准的PCB参数分析。

一只豌豆象的博客 1838

第九章动态规划——使用最小花费爬楼梯

使用动态规划解决,爬楼梯的最小花费问题,动态规划提升,新手也能看懂!!!

WenJGo的博客 1329

复现论文《Analysis of circulating current mechanism of Grid-forming offshore wind farm based on DRU-HVDC》

该论文研究了基于二极管整流单元(DRU)和低频交流(LFAC)输电的构网型(GFM)海上风电场并网系统中环流的产生机理。由于 DRU 不可控,系统电压与频率依赖于风力发电机(WT)的网侧变流器,当多台 WT 并联运行时,因输出电压幅值、相位、输出阻抗或频率不匹配,会产生基频环流,导致系统损耗增加与稳定性下降。论文通过理论建模与 MATLAB/Simulink 仿真,分析了四种不平衡工况下的环流机理,并指出幅值不平衡和阻抗不平衡引起无功环流,相位不平衡引起有功环流,频率不平衡则引起环流振荡,为后续环流抑制研究

huanghm88的专栏 106

14 | TensorFlow2对阿拉伯语手写字符数据集进行识别

该数据集由 60 名参与者书写的16,800 个字符组成,年龄范围在 19 至 40 岁之间,90% 的参与者是右手。每个参与者在两种形式上写下每个字符(从“alef”到“yeh”)十次,如图 7(a)和 7(b)所示。表格以 300 dpi 的分辨率扫描。使用 Matlab 2016a 自动分割每个块以确定每个块的坐标。该数据库分为两组:训练集(每类 13,440 个字符到 480 个图像)和测试集(每类 3,360 个字符到 120 个图像)。数据标签为1到28个类别。

微信号:RunsenLiu 2880

算法45:动态规划专练(力扣70: 爬楼梯 力扣746:使用最小花费爬楼梯)

动态规划

街头小瘪三的专栏 1309

YOLO26 数据标注工具:LabelImg、Label Studio实战指南:主流标注工具的安装配置与使用技巧,高效完成目标检测数据标注

本文介绍了目标检测中数据标注的核心地位与常用工具。数据标注质量直接影响模型性能,需要关注准确性、一致性等维度。文章详细讲解了边界框、类别标签等基本概念,并对比了LabelImg、Label Studio等主流标注工具的特点。重点介绍了LabelImg的轻量级、易用性等优势,以及Label Studio的协作功能,为不同规模项目提供标注工具选择建议。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1177

【LeetCode每日一题】——746.使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。

IronmanJay 1583

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode746. 使用最小花费爬楼梯,动态规划

leetcode746. 使用最小花费爬楼梯,动态规划

热爱C++和golang的学生 1179

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

746. 使用最小花费爬楼梯

大家可以发现这道题目相对于70.爬楼梯又难了一点,但整体思路是一样的。从509.斐波那契数到70.爬楼梯再到这道题目,大家感受到循序渐进的梯度了嘛。每个专题最开始的题目都有点简单,其实都是有目的性的,就是用简单题练习方法论,然后难度都是梯度上来的,一环扣一环。

YouMing_Li的博客 1235

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【leetcode刷题】66.使用最小花费爬楼梯——Java版

dp

公号:一条coding 1万+

力扣746-使用最小花费爬楼梯(动态规划 Java版详细题解)

个人刷题思路总结整理。

ItDaChuang的博客 692

【力扣刷题实战】使用最小花费爬楼梯

文章目录目录力扣题目:使用最小花费爬楼梯题目描述解题思路问题理解算法选择具体思路解题要点完整代码(C++)兄弟们共勉 !!! 每篇前言原题链接:746. 使用最小花费爬楼梯 - 力扣(LeetCode)给你一个整数数组 ,其中 是从楼梯第 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 或下标为 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例 1: 输入:cost = [10,15,20] 输出:15 解释:你将从下标为 1 的台阶开

2401_85548793的博客 1089

算法打卡day33|动态规划篇01|动态规划理论基础| Leetcode 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

JAVA算法|动态规划篇01|动态规划理论基础| Leetcode 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

改变从现在开始 1693

Python贪心:746. 使用最小花费爬楼梯

看一下递归公式,dp[i]由dp[i - 1],dp[i - 2]推出,既然初始化所有的dp[i]是不可能的,那么只初始化dp[0]和dp[1]就够了,其他的最终都是dp[0]dp[1]推出。因为是模拟台阶,而且dp[i]由dp[i-1]dp[i-2]推出,所以是从前到后遍历cost数组就可以了。dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。

2301_80052985的博客 993

算法训练 leetcode 746 最小花费爬楼梯

本题中就是,比如我根节点是 0,那从根节点只能是走一步或者两步,就是相对于两个分支,那走完一步,又有两种选择,就是走一步还是两步,同理,第一次走两步以后,那每次面对的选择也是走一步或者两步,最后如果叶子节点可以到达我们要的顶楼,那就是把经过所有节点的花费加起来就是我们要的花费,找一个花费最少的,那就是我们要的结果。因为我们只能跳一步或者两步,要么就是一步跳上来的,要么是两步,那我们发现除了0 和 1 的位置,可以直接占位,不会花费就可以呆着,其他的点要到达,其实都是要把前面跳点对应的花费花了的。

Amy_au的博客 762

【算法】【动态规划可视化、C++】力扣746. 使用最小花费爬楼梯

找到合适的状态表示方法,将问题划分为不同的状态,并确定状态之间的关系。

未来就在脚下。 1106

刷题记录 动态规划-4: 746. 使用最小花费爬楼梯

难度:简单给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。,20]15你将从下标为 1 的台阶开始。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15。cost = [,100,,1,,100,,100,6你将从下标为 0 的台阶开始。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。

weixin_44610684的博客 1555

LeetCode 746. 使用最小花费爬楼梯 C/C++/Python——动态规划

LeetCode 746. 使用最小花费爬楼梯 C/C++/Python——动态规划。

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 827

算法训练 | 动态规划Part1 | 509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

dp数组如何初始化:看一下递归公式,dp[i]由dp[i - 1],dp[i - 2]推出,既然初始化所有的dp[i]是不可能的,那么只初始化dp[0]和dp[1]就够了,其他的最终都是dp[0]dp[1]推出。根据dp数组的定义,到达第0台阶所花费的最小体力为dp[0],那么有同学可能想,那dp[0] 应该是 cost[0],例如 cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] 的话,dp[0] 就是 cost[0] 应该是1。

qq_48896570的博客 1078
上一篇: [双指针] (四) LeetCode 18.四数之和
下一篇: [滑动窗口] (一) LeetCode 209. 长度最小的子数组 和 LCR 016.无重复字符的最长子串
沉着冷静2024
博客等级 码龄5年 669粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值