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

news2024/11/16 7:45:47

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

文章目录

      • [动态规划] (三)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+1i+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

总结

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

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

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

相关文章

建议没用过这个的社区人都来试试!

不是吧&#xff0c;还有社区工作者不知道这个好东西嘛&#xff1f; 就是这个——写作火火&#xff0c;是写报告、方案一把好手啊 直接输入想写的内容&#xff0c;几秒钟报名啊方案啊就来了&#xff0c;不满意可以重新写&#xff0c;直到你满意为止&#xff0c;真的很方便。 …

mybatisplus查询百万数据慢问题

1.遇到的问题 本次查询的数据是一个视图&#xff0c;查询的数据量也比较大&#xff0c;整体有百万数据。 错误提示&#xff1a; 2023-11-02 07:55:52 [http-nio-11605-exec-3] ERROR c.a.druid.filter.stat.StatFilter [] [] - slow sql 6568 millis. SELECT COUNT(1) FROM (…

乐鑫工程部署过程记录

一、获取编译环境 1、下载sdk&#xff0c;ESP-IDF 这里有很多发布版本&#xff0c;当前我选择的是4.4.6&#xff0c;可以选择下载压缩包&#xff0c;也可以git直接clone 2、配置编译环境 我选择的是Linux Ubuntu下部署开发环境 查看入门指南 选择对应的芯片&#xff0c;我…

C语言 每日一题 11

1.使用函数求素数和 本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。 素数就是只能被1和自身整除的正整数。注意&#xff1a;1不是素数&#xff0c;2是素数。 函数接口定义&#xff1a; int prime(int p); int PrimeSum(int m, int n); 其中…

pip install python是关于 NMake Makefiles报错

CMake Error at CMakeLists.txt:2 (PROJECT):GeneratorNMake Makefilesdoes not support platform specification, but platformx64was specified. I cant install opencv-python because I dont have vs? - Stack Overflow 这样解决就行。

042-第三代软件开发-485通信

第三代软件开发-485通信 文章目录 第三代软件开发-485通信项目介绍485通信RS-485 简介RS-232 简介RS-485 与 RS-232 区别Qt 中使用485 总结一下 关键字&#xff1a; Qt、 Qml、 QSerialPort、 QSerialPort、 QThread 项目介绍 欢迎来到我们的 QML & C 项目&#xff01…

Keil uv5 MDK使用教程

目录 前言一、开发环境搭建1.1 Keil的安装1.2 其他工具安装1.3 注意事项 二、Keil基本使用2.1 新建工程模板2.1.1 基于固件库&#xff08;先复制文件夹&#xff0c;后添加文件&#xff09;2.1.2 基于寄存器2.1.3 基于HAL库 2.2 下载与调试2.3 工程目录下简介2.4 MDK使用技巧 前…

uniapp在APP端使用echarts用formatter设置y轴保留2位小数点不生效

uniapp使用echarts&#xff0c;在内置浏览器中&#xff0c;设置保留2位小数能正常显示&#xff08;代码如下&#xff09;&#xff0c;但是在APP端这个设置不起作用。 yAxis: {type: value,axisLabel: {formatter: function (val) {return val.toFixed(2); //y轴始终保留小数点…

H桥电机驱动器MS35656可pin对pin兼容DRV8812

MS35656 是一款双通道 DMOS 全桥驱动器&#xff0c;可以驱动一个步进电机或者两个直流电机。每个全桥的驱动电流在 24V 电源下可以工作到 1.4A。MS35656 集成了固定关断时间的 PWM 电流校正器&#xff0c;以及一个 2bit 的非线性 DAC&#xff08;数模转换器&#xff09;&#x…

【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件

文章目录 1.MenuStrip2.ContextMenuStrip3.ToolStrip4.StatusStrip 1.MenuStrip MenuStrip作为一个容器可以包含多个菜单项。MenuStrip 的重要属性包括&#xff1a; Name&#xff1a;菜单的名字Dock&#xff1a;菜单的停靠位置Items&#xff1a;菜单项的集合 ToolStripMenuI…

WebDAV之π-Disk派盘 + 一叶日记

推荐一款操作方便、界面简洁,记录生活点滴与心情,具有诗情画意的日记软件。 一叶日记是一款记录日记的手机软件,在这款软件中它里面有着各种不同的工具,可以方便用户去随时随地的记录日记,同时里面还有着各种不同的主题背景,可以供用户去选择使用各种功能,给用户记录带…

精准努力,提升自己的核心竞争力——中国人民大学与加拿大女王大学金融硕士

步入职场&#xff0c;相信大家都想成为职场的宠儿。经过一番摸爬滚打后&#xff0c;在职场稳固了地位。但想叱咤职场&#xff0c;还需要精准努力&#xff0c;提升自己的核心竞争力。中国人民大学与加拿大女王大学金融硕士项目为你补给能量。 任何资产都有贬值的风险&#xff0…

超好用的IDEA插件推荐,写完代码直接调试接口

Apipost推出IDEA插件非常省时高效&#xff0c;写完代码直接可以进行调试&#xff0c;而且支持生成接口文档&#xff0c;真是后端神器啊&#xff01; 可以点击下方链接安装更新或在插件商店中搜索安装 下载链接&#xff1a;https://plugins.jetbrains.com/plugin/22676-apipos…

解决postman打开一直转圈圈的问题

项目场景&#xff1a; 对于后端开发来说&#xff0c;Postman是经常使用的。特别是一些前后端分离的项目&#xff0c;后端开发测试接口就需要一款好用的接口测试工具&#xff0c;postman就是一款使用方便功能比较齐全的测试工具 问题描述 最近使用postman进行接口测试&#xf…

矢量图编辑_Inkscape裁剪与蒙版

文章目录 一、简介二、示例三、裁剪 Clipping四、蒙版 Masking 一、简介 裁剪&#xff08;Clipping&#xff09; 和 蒙版/遮罩&#xff08;masking&#xff09; 是限制对象&#xff08;或对象组&#xff09;哪一部分可见的方法。对于裁剪&#xff0c; 裁剪路径&#xff08;cli…

window安装不同版本的mysql

引用&#xff1a;https://blog.csdn.net/weixin_45151960/article/details/113537526 当安装第二个的时候&#xff0c;&#xff0c;会有问题&#xff0c;&#xff0c; 下载mysql8 和 mysql5.7 &#xff1a; https://downloads.mysql.com/archives/community 下载之后&#xff…

项目实战:通过axios加载水果库存系统的首页数据

1、创建静态页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href"style/index.css"><script src"script/axios.mi…

python调用飞书机器人发送文件

当前飞书webhook机器人还不支持发送文件类型的群消息&#xff0c;可以申请创建一个机器人应用来实现群发送文件消息。 创建机器人后&#xff0c;需要开通一系列权限&#xff0c;然后发布。由管理员审核通过后&#xff0c;才可使用。 包括如下的权限&#xff0c;可以获取群的c…

项目实战:封装响应结果以及抽取响应代码到工具类

1、创建GsonUtil工具类&#xff0c;封装把java对象转成json字符串方法 package com.csdn.fruit.util; import com.google.gson.Gson; public class GsonUtil {public static String toJson(Object obj) {//java object -> java json stringGson gson new Gson();return gs…

Kibana中使用Dev Tools控制台创建索index引同时添加date类型的时间参数(用于根据时间序列展示数据)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…