算法---动态规划练习-2(使用最小花费爬楼梯)

news2024/11/16 19:02:31

使用最小花费爬楼梯

  • 1. 题目解析
  • 2. 讲解算法原理
    • 方法一:
    • 方法二:
  • 3. 编写代码
    • 解法一
    • 解法二

1. 题目解析

题目地址:点这里

在这里插入图片描述

2. 讲解算法原理

在这里插入图片描述

在这里插入图片描述

方法一:

  1. 首先,定义一个大小为n+1的数组dp,用于存储到达每个台阶的最小花费。其中n为cost数组的大小,也就是楼梯的总数。

  2. 初始化dp数组的前两个元素dp[0]和dp[1]为0,表示初始状态下到达第一个台阶和第二个台阶的最小花费为0。

  3. 然后,从第三个台阶开始循环遍历到第n个台阶。对于每个台阶i,计算两种方式到达该台阶的最小花费:一种是从前一个台阶i-1跳上来,另一种是从前前个台阶i-2跳上来。分别计算出这两种方式的花费,取其中较小的一个作为到达当前台阶i的最小花费,将其赋值给dp[i]。

  4. 最后,返回dp[n],表示到达第n个台阶的最小花费

方法二:

  1. 首先,定义一个大小为n的数组dp,用于存储到达每个台阶的最小花费。其中n为cost数组的大小,也就是楼梯的总数。

  2. 接下来,初始化dp数组的最后两个元素dp[n-1]和dp[n-2]为cost[n-1]和cost[n-2],分别表示到达最后一个台阶和倒数第二个台阶的最小花费。

  3. 然后,从倒数第三个台阶开始循环遍历到第一个台阶。对于每个台阶i,计算两种方式到达该台阶的最小花费:一种是从下一个台阶i+1跳上来,另一种是从下下个台阶i+2跳上来。分别计算出这两种方式的花费,取其中较小的一个作为到达当前台阶i的最小花费,将其赋值给dp[i]。

  4. 最后,返回dp[0]和dp[1]中较小的一个,表示从第一个台阶和第二个台阶中选择一个起点的最小花费。

3. 编写代码

解法一

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n=cost.size();
        vector<int> dp(n+1);
        dp[0]=0,dp[1]=0;
        for(int i=2;i<=n;i++)
        {
            int a=dp[i-1]+cost[i-1];
            int b=dp[i-2]+cost[i-2];
            dp[i]=a>b?b:a;
        }
        return dp[n];
    }
};

解法二

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n=cost.size();
        vector<int> dp(n);
        dp[n-1]=cost[n-1],dp[n-2]=cost[n-2];
        for(int i=n-3;i>=0;i--)
        {
            int a=dp[i+1]+cost[i];
            int b=dp[i+2]+cost[i];
            dp[i]=a>b?b:a;
        }
        return min(dp[0],dp[1]);
    }
};

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

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

相关文章

开源博客项目Blog .NET Core源码学习(10:App.Framwork项目结构分析)

开源博客项目Blog的解决方案总共包括4个项目&#xff0c;其中App.Hosting项目包括所有的页面及控制器类&#xff0c;其它项目主要提供数据库访问、基础类型定义等。这四个项目的依赖关系如下图所示&#xff0c;本文主要分析App.Framwork项目的主要结构及主要文件的用途。   …

使用ggplot2绘制带星号的热图

原文链接:使用ggplot2绘制带星号"*"的热图 本期教程内容 本期教程所有数据和代码,及往期教程数据和代码可在社群中获得 绘制教程 导入相关的R包###@导入相关的R包 library(readxl) library(tidyverse) library(readxl) library(ggsci) library(viridis) library(R…

Python开源项目周排行 2024年第6周

Python 趋势周报&#xff0c;按周浏览往期 GitHub,Gitee 等最热门的Python开源项目&#xff0c;入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后&#xff0c;都是当周相对热门的项目。 入选公式&#xff1d;70%GitHub Trending20%Gitee10%其他 关注微…

CentOS7安装mysql-5.7.44单机和主从复制

官网下载地址&#xff1a; https://downloads.mysql.com/archives/community/ 1、单机安装 安装依赖 yum -y install libaio 解压安装 tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gzmv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysqlcd /usr/local/mysql…

吴恩达深度学习笔记:神经网络的编程基础2.1-2.4

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.1 二分类(Binary Classification)2.2 逻辑回归(Logistic Regression)2.3 逻辑回归的代价函数&#xff08;Lo…

计数DP

J - The King‘s Walk 思路&#xff1a;dx abs(x1 - x2), dy abs(y1 - y2), 那么最短距离一定是,然后就是状态表示了&#xff0c;表示当前点向上走i步且最终在第j列的方案数&#xff0c;我们知道我们每一步都要缩短短距离&#xff0c;也就是向上走&#xff0c;那么我们转移…

vue3怎么读取本地json数据

在Vue 3中&#xff0c;可以使用fetch API或其他HTTP客户端来读取本地JSON数据。以下是一个使用fetch的示例&#xff1a; <template><div><h1>本地JSON数据</h1><div v-if"data">{{ data }}</div></div> </template>…

JAVA校园失物招领网站源码带后台

开发环境是Eclipse none&#xff0c;Mysql5.6数据库&#xff0c;Spring MVC框架&#xff0c;jdk1.7&#xff0c;Tomcat 8.0.27,静态页面是参照网上设计的&#xff0c;系统功能基本完善&#xff0c;目前还没有发现有需要解决的bug

vim编辑器和gcc/g++编辑器的使用讲解

vim编辑器 1 vim的基本概念 vim是Linux的编写代码的工具&#xff0c;是一种多模式的编辑器。 Linux中vim的常用的模式大概可以分为三种&#xff0c;分别是&#xff1a; 命令模式&#xff08;command mode&#xff09;、插入模式&#xff08;Insert mode&#xff09;和底行模式…

Xcode-双架构arm64 x86_64编译

要启用通用构建&#xff0c;在最新版本的 Xcode 中&#xff0c;请打开您的项目设置&#xff0c;然后依次选择&#xff1a; 1. “Build Settings” 选项卡。 2. 在顶部输入框中输入 “Architectures”。 3. 在 “Architectures” 下拉列表中选择 “Other”。 4. 在输入框中输入 …

Personal Website

Personal Website Static Site Generators hexo hugo jekyll Documentation Site Generator gitbook vuepress vitepress docsify docute docusaurus Deployment 1. GitHub Pages 2. GitLab Pages 3. vercel 4. netlify Domain 域名注册 freessl 域名解析域名…

【微服务】Eureka(服务注册,服务发现)

文章目录 1.基本介绍1.学前说明2.当前架构分析1.示意图2.问题分析 3.引出Eureka1.项目架构分析2.上图解读 2.创建单机版的Eureka1.创建 e-commerce-eureka-server-9001 子模块2.检查父子pom.xml1.子 pom.xml2.父 pom.xml 3.pom.xml 引入依赖4.application.yml 配置eureka服务5.…

火星文:一种特殊的文字编码

title: 火星文&#xff1a;一种特殊的文字编码 date: 2024/3/25 13:26:20 updated: 2024/3/25 13:26:20 tags: 火星文文字变种网络流行解码阅读社交趣味艺术创新未来符号 定义 火星文是一种特殊的文字编码&#xff0c;也称为奇文&#xff0c;其特点是将常见的文字进行特殊的变…

5.3 用PyTorch实现Logistic回归

一、数据准备 Logistic回归常用于解决二分类问题。 为了便于描述&#xff0c;我们分别从两个多元高斯分布 N₁&#xff08;μ₁&#xff0c;Σ₁ &#xff09;、N₂&#xff08;μ₂&#xff0c;Σ₂&#xff09;中生成数据 x₁ 和 x₂&#xff0c;这两个多元高斯分布分别表示…

【Redis知识点总结】(七)——缓存雪崩、缓存穿透、缓存击穿、Redis高级用法

Redis知识点总结&#xff08;七&#xff09;——缓存雪崩、缓存穿透、缓存击穿、Redis高级用法 缓存雪崩缓存穿透布隆过滤器 缓存击穿Redis高级用法bitmapHyperLogLog 缓存雪崩 缓存雪崩是指&#xff0c;同一时间有大量的缓存key失效&#xff0c;或者redis节点直接宕机了&…

基于nodejs+vue学生作业管理系统python-flask-django-php

他们不仅希望页面简单大方&#xff0c;还希望操作方便&#xff0c;可以快速锁定他们需要的线上管理方式。基于这种情况&#xff0c;我们需要这样一个界面简单大方、功能齐全的系统来解决用户问题&#xff0c;满足用户需求。 课题主要分为三大模块&#xff1a;即管理员模块和学生…

(已解决)vue运行时出现Moudle Bulid error: this.getoptios is not a function at........

1.首先查看你的less-loader版本 点击package.json 即可查看less-loader版本&#xff0c;我之前的版本是12.0&#xff0c;太高了&#xff0c;出现了不兼容的问题 2、卸载less-loader ctrlshift~ 打开项目终端 &#xff0c;输入&#xff1a; npm uninstall less-loader 3.重…

Linux中的常用基础操作

ls 列出当前目录下的子目录和文件 ls -a 列出当前目录下的所有内容&#xff08;包括以.开头的隐藏文件&#xff09; ls [目录名] 列出指定目录下的子目录和文件 ls -l 或 ll 以列表的形式列出当前目录下子目录和文件的详细信息 pwd 显示当前所在目录的路径 ctrll 清屏 cd…

突破极限!DNF全新装备现身,无限高达流震撼登场

近期&#xff0c;DNF&#xff08;地下城与勇士&#xff09;的玩家们热议的话题不再是往日的副本攻略或职业平衡&#xff0c;而是一件神秘的装备——“玉化腰带”。这个装备的出现&#xff0c;引发了一股前所未有的热潮&#xff0c;因为它带来的无限高达流&#xff0c;彻底颠覆了…

0325 ISP流程介绍 RAW/RGB/YUV

学习参考:isp流程介绍(yuv格式阶段) - 知乎 一、RAW 1.1 ISP RAW 之DPC DPC(defective pixel correction)也就是坏点矫正&#xff0c;在sensor接收光信号&#xff0c;并做光电转换之后。 这一步设计的意义在于&#xff1a;摄像头sensor的感光元件通常很多会存在一些工艺缺陷…