代码随想录算法训练营第三十二天|509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

目录

509.斐波那契数

动态规划五部曲:

        1.确定dp数组(dp table)以及下标的含义

        2.确定递推公式

        3.dp数组如何初始化

        4.确定遍历顺序

        5.举例推导dp数组

70.爬楼梯

动态规划五部曲:

        1.确定dp数组(dp table)以及下标的含义

        2.确定递推公式

        3.dp数组如何初始化

        4.确定遍历顺序

        5.举例推导dp数组

746.使用最小花费爬楼梯

动态规划五部曲:

        1.确定dp数组(dp table)以及下标的含义

        2.确定递推公式

        3.dp数组如何初始化

        4.确定遍历顺序

        5.举例推导dp数组


509.斐波那契数

题目链接:509. 斐波那契数 - 力扣(LeetCode)

动态规划五部曲:

        1.确定dp数组(dp table)以及下标的含义

                dp[i]表示第i项斐波那契数列

        2.确定递推公式

                第i项斐波那契数列 = 前两项之和,即dp[i] = dp[i-1] + dp[i-2];

        3.dp数组如何初始化

                递推公式的i = 0和i = 1不符合递推公式,且是最边界情况,特别处理,

         即dp[0] = 0,dp[1] = 1;

        4.确定遍历顺序

                从第三个数据位置开始遍历

        5.举例推导dp数组

                dp[2]、dp[3]符合,递推到dp[...]都可行

class Solution 
{
public:int fib(int n) {vector<int> dp(n+10);dp[0] = 0;dp[1] = 1;for(int i=2; i<=n; i++){dp[i] = dp[i-1] + dp[i-2];}return dp[n];}
};

70.爬楼梯

题目链接:70. 爬楼梯 - 力扣(LeetCode)

动态规划五部曲:

        1.确定dp数组(dp table)以及下标的含义

                dp[i]表示第i个台阶的方案数

        2.确定递推公式

               1阶:1

                2阶:2

                3阶:先走一步,如果一步走一阶,剩2阶,方案数为2,

                        如果一步走两阶,剩1阶方案数为1,方案数总共2+1 = 3

                4阶:先走一步,如果一步走一阶,剩3阶,方案数为3,

                        如果一步走两阶,剩2阶方案数为2,方案数总共3+2 = 5

                5阶:先走一步,如果一步走一阶,剩4阶,方案数为5,

                        如果一步走两阶,剩3阶方案数为3,方案数总共5+3 = 8

                总结:当前台阶i的方案数 = i-1台阶方案数 +i-2台阶方案数

                即,dp[i] = dp[i-1] + dp[i-2]

        3.dp数组如何初始化

                递推公式的i = 1和i = 2不符合递推公式,且是最边界情况,特别处理,

         即dp[1] = 1,dp[2] = 2;

        4.确定遍历顺序

                从第三个数据位置开始遍历

        5.举例推导dp数组

                第二步推到过了可行。

class Solution {
public:int climbStairs(int n) {vector<int> dp(n+10);dp[1] = 1;dp[2] = 2;for(int i=3; i<=n; i++){dp[i] = dp[i-1] + dp[i-2];	// i-1台阶的方案数 +i-2台阶的方案数 }   return dp[n];}
};

746.使用最小花费爬楼梯

题目链接:746. 使用最小花费爬楼梯 - 力扣(LeetCode)

动态规划五部曲:

        1.确定dp数组(dp table)以及下标的含义

                dp[i]表示到达第i个台阶所花的最小费用

        2.确定递推公式

                0阶:0元。

                1阶:0元。

                2阶:min(到达(2-1)阶的费用+(2-1)阶跳的费用 , 到达(2-2)阶的费用 +(2-2)阶跳的费用)。

                3阶:min(到达(3-1)阶的费用+(3-1)阶跳的费用 , 到达(3-2)阶的费用 +(3-2)阶跳的费用)。

                4阶:min(到达(4-1)阶的费用+(4-1)阶跳的费用 , 到达(4-2)阶的费用 +(4-2)阶跳的费用)。

                整体看感觉思路可行:即,dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])。

        3.dp数组如何初始化

                第0阶和第1阶的为起点,不需要花费价钱,故dp[0] = 0, dp[1] = 0。

        4.确定遍历顺序

                从第三个数据位置开始遍历

        5.举例推导dp数组

                按预期,数据是从第0个台阶依次到第n个台阶(顶点)的变化,所以数据是递推过去的,担心min()可能取0的值,验证了i = 2的程序,和i = 3的清楚,数据按预测的递推过程进行变化,可行。

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {vector<int> dp(cost.size()+10);dp[0] = 0;dp[1] = 0;int n = cost.size();for(int i=2; i<=n; i++){// i-1往上爬 或者i-2往上爬,取最小dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]); // 通过这个输出+题目信息把"<n"改成了"<=n",了解到n-1是台阶,而不是到顶// cout<<dp[i]<<' '<<dp[i-1]+cost[i-1]<<' '<<dp[i-2]+cost[i-2]<<'\n';   }return dp[n];}
};

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

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

相关文章

SQL开窗函数相关的面试题和答案

基本排序与分组问题 题目&#xff1a;有学生成绩表tb_score&#xff0c;包含字段SNO&#xff08;学号&#xff09;、SCLASS&#xff08;班级&#xff09;、CHINESE&#xff08;语文成绩&#xff09;、ENGLISH&#xff08;英语成绩&#xff09;、ARITH&#xff08;数学成绩&…

ISP各模块功能介绍

--------声明&#xff0c;本文为转载整理------- ISP各个模块功能介绍&#xff1a; 各模块前后效果对比&#xff1a; 黑电平补偿&#xff08;BLC&#xff09; 在理想情况下&#xff0c;没有光照射的像素点其响应值应为0。但是&#xff0c;由于杂质、受热等其它原因的影响&…

前缀和练习

【模版】前缀和 【模板】前缀和_牛客题霸_牛客网 思路 要想快速找出某一连续区间的和&#xff0c;我们就要使用前缀和算法。 其实本质是再创建一个dp数组&#xff0c;每进一次循环加上原数组的值&#xff08;dp代表arr的前n项和&#xff09;&#xff1a; vector<int>…

【Git】问题汇总

在push的时候显示 protocol error: bad line length 8192 我在本地创建了一个gogs服务器&#xff0c;现在正在上传代码&#xff0c;但是出现了上述的这个问题。 解决方法 设置本地http.postBuffer&#xff08;待验证&#xff09; 方法一&#xff1a;全局配置 git config --g…

STM32和国民技术(N32)单片机串口中断接收数据及数据解析

一、串口配置 根据单片机不同&#xff0c;串口IO口配置也不同&#xff0c;像STM32单片机&#xff0c;RX脚可以配置为复用输出&#xff0c;也可以配置为浮空输入模式。但是国民技术单片机&#xff08;N32&#xff09;的RX是不能配置为复用输出模式的&#xff0c;这样是收不到数…

3. 【Vue实战--孢子记账--Web 版开发】--登录大模块

从这篇文章开始我们就进入到了孢子记账的前端开发&#xff0c;在本专栏中我默认大家的电脑上都已经配置好了开发环境。下面我们一起开始编写孢子记账的Web版吧。 一、功能 登录大模块功能包括注册、登录和找回密码功能&#xff0c;在本篇文章中我只会展示注册界面的实现&…

【2024年华为OD机试】 (A卷,100分)- 端口合并(Java JS PythonC/C++)

一、问题描述 题目描述 有 M 个端口组 (1 < M < 10)&#xff0c; 每个端口组是长度为 N 的整数数组 (1 < N < 100)&#xff0c; 如果端口组间存在 2 个及以上不同端口相同&#xff0c;则认为这 2 个端口组互相关联&#xff0c;可以合并。 输入描述 第一行输入端…

73.矩阵置零 python

矩阵置零 题目题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a; 题解思路分析Python 实现代码代码解释提交结果 题目 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例…

基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)

本篇技术博文摘要 &#x1f31f; 基于华为enspOSPF状态机、OSPF工作过程、.OSPF基本配置等保姆级别具体详解步骤&#xff1b;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 &#x1f4d8; 在这个快速发展的技术时代&#xff0c;与时俱进是每个IT人的必修课。我…

宝塔安装教程,bt怎么安装 linux

Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 37a09b35 Ubuntu/Deepin安装脚本 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo b…

SOLID原则学习,接口隔离原则

文章目录 1. 定义2. 为什么要遵循接口隔离原则&#xff1f;3. 违反接口隔离原则的例子4. 遵循接口隔离原则的改进5. 总结 1. 定义 接口隔离原则&#xff08;Interface Segregation Principle, ISP&#xff09; 接口隔离原则是面向对象设计中的五大原则&#xff08;SOLID&#…

测试开发之面试宝典

目录 session和cookie的区别 session和cookie的区别 1.session和cookie都是鍵值对应的 2.session和cookie都是服务器生成的&#xff0c;session的ID&#xff0c;即服各器用来识别读取session对象的一把钥匙 3.session是保存在服各器端&#xff0c;而cookie是返回給客戶端的&…

Jenkins-持续集成、交付、构建、部署、测试

Jenkins-持续集成、交付、构建、部署、测试 一: Jenkins 介绍1> Jenkins 概念2> Jenkins 目的3> Jenkins 特性4> Jenkins 作用 二&#xff1a;Jenkins 版本三&#xff1a;DevOps流程简述1> 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff0…

SQL进阶实战技巧:统计相同时刻多地登陆的用户?

目录 0 问题描述 1 数据准备 2 代码实现 3 问题拓展 3.1 查询每个用户登录日期的最大空档期

BurpSuite之FUZZ模糊测试

Fuzz会生成大量的随机数据对目标网站进行测试,去挖掘可能存在的漏洞,类似密码爆破,但是fuzz针对的是漏洞进行爆破,它也有自己的爆破字典 (fuzz用的好漏洞少不了) 哪些网站要用fuzz呢? 1. 当最目标网站没有更好的办法的时候就可以使用fuzz尝试爆破测试。 2. 目标网站什么都…

从0到机器视觉工程师(六):配置OpenCV和Qt环境

CMake配置OpenCV CMakeLists.txt文件的编写 cmake_minimum_required(VERSION 3.20) project(test_opencv LANGUAGES CXX) #寻找Opencv库 FIND_PACKAGE(OpenCV REQUIRED) include_directories(test_opencv ${OpenCV_INCLUDE_DIRS}) add_executable(test_opencv main.cpp) TARGE…

Vue3框架核心功能点响应式数据reactive、组合式API setup、computed、组件通信、路由导航,状态管理vuex、pinia等的实战示例代码

记录几个Vue3框架核心功能点&#xff0c;例如响应式数据reactive、组合式API setup、computed、组件通信、路由导航&#xff0c;状态管理vuex、pinia……等实战示例代码&#xff1a; 一、响应式数据&#xff08;Reactive Data&#xff09; 创建响应式对象 使用reactive函数创建…

svelte5中使用react组件

在svelet5中导入并使用react组件库 svelte5中使用react组件 svelte5中使用react组件 在svelet5中导入并使用react组件库, 示例项目地址&#xff1a;https://github.com/shenshouer/my-svelte-react 在svelte5中当前还有问题&#xff0c;无法将children传递到react中渲染 使用…

R语言装环境Gcc报错以及scater包的安装

error: ‘timespec_get’ has not been declared in ‘::’ 80 | using ::timespec_get; 在conda 的虚拟环境中升级gcc的版本 conda install -c conda-forge gcc11 gxx11终极方法&#xff0c;在R的最新版本和环境下装啥都能成功&#xff01;&#xff01; 比如beyondcell的方法…

CDA数据分析师一级经典错题知识点总结(3)

1、SEMMA 的基本思想是从样本数据开始&#xff0c;通过统计分析与可视化技术&#xff0c;发现并转换最有价值的预测变量&#xff0c;根据变量进行构建模型&#xff0c;并检验模型的可用性和准确性。【强调探索性】 2、CRISP-DM模型Cross Industry Standard Process of Data Mi…