Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >爬楼梯的最小费用动态规划

爬楼梯的最小费用动态规划
EN

Stack Overflow用户
提问于 2019-12-07 11:34:26
回答 1查看 568关注 0票数 1

我正试图解决以下有关leetcode的问题:

代码语言:javascript
运行
AI代码解释
复制
On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). 
Once you pay the cost, you can either climb one or two steps. 
You need to find minimum cost to reach the top of the floor, and you can either start 
from the step with index 0, or the step with index 1.

我的解决方案如下:

代码语言:javascript
运行
AI代码解释
复制
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        return helper(cost, cost.size() - 1);
    }

    int helper(vector<int>& cost, int currStair) {
        static vector<double> minCost(cost.size(), 0);
        minCost[0] = cost[0];
        minCost[1] = cost[1];
        if (minCost[currStair] > 0) {
            return minCost[currStair];
        }

        return minCost[currStair] = min(helper(cost, currStair - 1), helper(cost, currStair - 2)) + cost[currStair];
    }
};

当我尝试提交时,我会得到以下运行时错误。为什么?

AddressSanitizer: heap-buffer-overflow on address 0x603000000008 at pc 0x0000004089af bp 0x7ffdd02dcaa0 sp 0x7ffdd02dca98

编辑的解决方案:

代码语言:javascript
运行
AI代码解释
复制
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        return helper(cost, cost.size() - 1);
    }

    int helper(vector<int>& cost, int currStair) {
        if (currStair < 0 || cost.size() <= 1) {
            return 0;
        }

        static vector<double> minCost(cost.size(), 0);
        minCost[0] = cost[0];
        minCost[1] = cost[1];

        if (minCost[currStair] > 0) {
            return minCost[currStair];
        }

        minCost[currStair] = min(helper(cost, currStair - 1), helper(cost, currStair - 2)) + cost[currStair];

        return min(minCost[cost.size()-1], minCost[cost.size()-2]);
    }
};

如您所见,我在代码的末尾做了一些更改。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-07 12:00:07

这个问题是递归缺少的基本情况。在每个递归调用中,currStair总是减少-1或-2,但是没有条件检查它是否低于0并切断递归,从而导致像minCost[-1]这样的非法内存访问。

增加先决条件

代码语言:javascript
运行
AI代码解释
复制
if (currStair < 0) return 0;

你又回到了轨道上,尽管算法仍然有正确性问题需要解决。

这里有一个提示,可以帮助你摆脱困境:

的说明说:“您需要找到到达楼层顶部的最小成本,可以从索引0的步骤开始,也可以从索引1的步骤开始。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59229495

复制
相关文章
动态规划:使用最小花费爬楼梯
题目链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs/
代码随想录
2021/01/12
7540
动态规划:爬楼梯
所以到第三层楼梯的状态可以由第二层楼梯 和 到第一层楼梯状态推导出来,那么就可以想到动态规划了。
代码随想录
2021/01/12
1.1K0
简单动态规划—爬楼梯
又到了每周的算法时间了,今天给大家带来一道很经典,又很简单,又比较适合对动态规划极度恐惧的童鞋,做动态规划的题,一定要学会分析,慢慢找到状态转移方程,不多说,来看看题目:
用户2802329
2020/03/18
4680
动态规划中篇:爬楼梯
主要推送关于对算法的思考以及应用的消息。培养思维能力,注重过程,挖掘背后的原理,刨根问底。本着严谨和准确的态度,目标是撰写实用和启发性的文章,欢迎您的关注。 01 — 你会学到什么? 在前面的两个推送: LeetCode实战:动态规划算法是怎么一回事 动态规划:括号知多少 我们通过两个实际问题,《装水做多的容器》和《括号知多少》,初步对动态规划有了一个初步了解。 在本推送中,我们将解决以下两个问题: 动态规划牺牲空间换来了什么? 动态规划如何提升时间性能的? 再举动态规划的一个实际例子 02 — 动态规划相
double
2018/04/02
1.2K0
leetcode 746. 使用最小花费爬楼梯----动态规划篇
将问题转化为对二叉树的遍历,因为初始阶段可以选择0或1,因此会有两颗二叉树,那么最终结果取这两颗二叉树中较小值
大忽悠爱学习
2021/11/15
2610
动态规划(一):爬楼梯
时,处于原地,因为步长为 1 ~ 2 阶,不能有前进之后再后退的情况,所以只能有当前一种方式,所以
zhipingChen
2018/09/13
7380
动态规划(一):爬楼梯
动态规划--爬楼梯问题(入门)
使用这种方式会出现重复计算的问题,因此,一般动态规划都会定义一个数组来存储前面所用到的值,修改后代码如下:
西西嘛呦
2020/08/26
3960
LeetCode 70. 爬楼梯(动态规划)
题目链接:https://leetcode-cn.com/problems/climbing-stairs/
Michael阿明
2021/02/20
3000
LeetCode 70. 爬楼梯(动态规划)
Leetcode 746. Min Cost Climbing Stairs 最小成本爬楼梯 (动态规划)
有一个楼梯,第i阶用cost[i](非负)表示成本。现在你需要支付这些成本,可以一次走两阶也可以走一阶。 问从地面或者第一阶出发,怎么走成本最小。
racaljk
2018/08/31
5870
【动态规划/背包问题】特殊的多维费用背包问题
将每个任务看作一个「物品」,完成任务所需要的人数看作「成本」,完成任务得到的利润看作「价值」。
宫水三叶的刷题日记
2021/08/13
1.3K0
动态规划模型:背包二维费用问题
有 n 个物品,它们的重量为 weight[i],对应的价值为 value[i],在不超过背包总重量 w 的情况下,求能装入的最大价值。
前端西瓜哥
2022/12/21
3490
天池 在线编程 最小的行程(动态规划)
https://tianchi.aliyun.com/oj/338592228998370026/357527484118536805
Michael阿明
2021/09/06
2690
深入理解动态规划算法 - 爬楼梯
平时大家都喜欢爬楼梯,有时喜欢一次爬一级楼梯,有时喜欢一次爬两级楼梯。接下来考虑当你开始迈出第一步的情况。
算法与编程之美
2019/07/17
6510
经典动态规划:最小路径和
现在给你输入一个二维数组grid,其中的元素都是非负整数,现在你站在左上角,只能向右或者向下移动,需要到达右下角。现在请你计算,经过的路径和最小是多少?
labuladong
2021/09/23
3520
64最小路径和----动态规划
图解动态规划算法思想 此时可以求得最小路径和为7, 通过上面例子我们可以得出:要求的(i,j)位置的最优解,我们只需要比较该位置上方(i,j-1)和左方(i-1,j)的最优解,取最小值再加上(i,j)当前位置对应的grid数组的值即可,这样我们就得到了递归公式 class Solution { public: int minPathSum(vector<vector<int>>& grid) { int r = grid.size(); //二维数组
大忽悠爱学习
2021/11/15
3700
leetcode 64 | 最小路径和(动态规划)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
ACM算法日常
2019/03/01
8160
leetcode 64 | 最小路径和(动态规划)
算法简单题,吾辈重拳出击 - 动态规划之爬楼梯
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
掘金安东尼
2022/09/19
3400
算法简单题,吾辈重拳出击 - 动态规划之爬楼梯
LeetCode 931. 下降路径最小和(动态规划)
下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列。
Michael阿明
2020/07/13
3850
LC 64. 最小路径和(动态规划)
m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= gridi <= 100
SakuraTears
2022/01/13
1860
LC 64. 最小路径和(动态规划)
点击加载更多

相似问题

基于动态规划的最小出行路径费用

231

最小费用线性规划问题

122

动态规划:最小损耗和最小地段

20

动态规划最小网格路径

26

动态规划,最小硬币数

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文