代码随想录算法训练营第38天 | 动态规划理论基础 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯

动态规划理论基础

动态规划适用于解决有重叠子问题的问题。所以动态规划中的每一个状态一定是由上一个状态推导来的,这一点区分于贪心,因为贪心每一步总是取局部最优。
解题步骤

  1. 确定dp数组的含义
  2. 确定递推表达式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 手动测试模拟,推导dp数组

关于动态规划的debug:围绕dp数组展开,举例对dp数组的取值进行模拟,打印日志查看是否与预想一致。

斐波那契数

Alt
动态规划通用解法的完整体现。

class Solution {
public:int fib(int n) {if(n < 2)  return n;// dp[i]为斐波那契数列F(i)的值vector<int> dp(n + 1);dp[0] = 0;dp[1] = 1;for(int i = 2; i <= n; i++){dp[i] = dp[i - 1] + dp[i - 2];  // 递推表达式}return dp[n];}
};

简化的写法,其实每一次更新只与前两个数相关,只维护两个元素就行。

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

爬楼梯

Alt
dp[i]为爬 i 级台阶的爬法数目,那么可以有:dp[i] = dp[i - 1] + dp[i - 2],因为要么爬一级,要么爬两级,所以总共的方法数目就来自于 i - 1 和 i - 2。
至于初始化,dp[0]没有爬0级台阶这种情况,讨论它不符合 dp 数组的含义,所以可以忽略。初始化 dp[1] 和 dp[2],从 n = 3 开始遍历。

class Solution{
public:int climbStairs(int n){vector<int> dp(n + 1);if(n < 2)  return n;  // 避免dp[2]越界dp[1] = 1;dp[2] = 2;for(int i = 3; i <= n; i++){dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
};

其实这道题也可以扩展为一次有走更多种台阶的可能,思路仍是相似的,后面打卡中会有具体实现。

使用最小花费爬楼梯

Alt
类似的思路,掌握动态规划方法论。

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();// dp[i]为爬到第i级需要的最小代价vector<int> dp(n + 1, 0);  // dp[0]和dp[1]初始化为0,因为是从这两级开始爬,花费为0for(int i = 2; i <= n; i++){dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}return dp[n];}
};

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

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

相关文章

问题:在下列选项中,下列哪种情况不属于生理排泄过程的是() #媒体#学习方法#经验分享

问题&#xff1a;在下列选项中&#xff0c;下列哪种情况不属于生理排泄过程的是&#xff08;&#xff09; A.CO2由呼吸系统排出 B.食物残渣由消化道排出 C.皮肤排出汗液 D.肾脏排出尿液 E.由消化道排出的胆色素 参考答案如图所示

Endnote常见设置(硕士毕业论文参考文献修改)

1、根据大多数期刊或学校使用的标准&#xff0c;英文名首字母大写后续字母小写。 2、需要手动调整Endnote中的参考文献相关内容 3、关于姓名大小写设置 AS IS是不更改大小写&#xff0c;EndNote库中文献的大小是什么样&#xff0c;Word中就显示什么样。选择Normal为首字母大…

C++初阶 内存管理和模板

目录 一、new 1.1什么是new&#xff1f; 1.2为什么要有new&#xff1f; 1.3使用new 1.4 new的超级好处 二、delete 2.1什么是delete&#xff1f; 2.2为什么要有delete&#xff1f; 2.3使用delete 三、 malloc / free和new / delete的共同点和区别 四、浅谈模板 4.1什…

AI大模型专题:OWASP大语言模型应用程序十大风险V1.0

今天分享的是AI大模型系列深度研究报告&#xff1a;《AI大模型专题&#xff1a;OWASP大语言模型应用程序十大风险V1.0》。 &#xff08;报告出品方&#xff1a;OWASP&#xff09; 报告共计&#xff1a;14页 LM01:2023_ 提示词注入 描述&#xff1a;提示词注入包括绕过过滤器…

SQL注入:sqli第一关

一、实验设备&#xff1a; 需要下载并安装phpstudy_pro&#xff0c;下载sqli-labs-php7-master解压到/phpstudy_pro/www中。 二、实验步骤&#xff1a; 1、在id1后加入一个闭合符号“ ‘ ”&#xff0c;但是当你输入?id1&#xff0c;是会报错的&#xff0c; http://127.0.…

深度学习图像分类相关概念简析+个人举例1(ANN相关概念与计算)

&#xff08;1&#xff09;神经网络&#xff1a;英文全称Artificial Neural Network&#xff0c;简称为ANN。 神经网络是一种模仿人脑神经元结构和功能的人工智能模型。它由多个神经元&#xff08;也称节点、单元&#xff09;组成&#xff0c;每个神经元通过计算输入和权重的线…

实用篇 | postman在AI模型中输入speech,text,image使用详解

Postman相关直达 实用篇 | 利用FlaskPostman为深度学习模型进行快速测试(超详细)_ CSDN博客 1.基础知识 1.1.postman发送请求(json和urlencoded) 1.1.1.发送 JSON 数据请求&#xff08;form-data&#xff09;&#xff1a; 要求&#xff1a; 请求方法&#xff1a;POST&#…

jQuery前段开发--星级评价和图形跟随指针移动

一、实验原理&#xff1a; 当鼠标移入某个星星&#xff0c;前面的星星都会被点亮&#xff1b;当鼠标移出&#xff0c;星星将会变暗&#xff0c;单击某个星星后&#xff0c;即可完成评论&#xff0c;此时鼠标移出后&#xff0c;被单击星星前面的星星都会被点亮&#xff0c;后面…

ES6-let

一、基本语法 ES6 中的 let 关键字用于声明变量&#xff0c;并且具有块级作用域。 - 语法&#xff1a;let 标识符;let 标识符初始值; - 规则&#xff1a;1.不能重复声明let不允许在相同作用域内重复声明同一个变量2.不存在变量提升在同一作用域内&#xff0c;必须先声明才能试…

Mac电脑连接linux远程桌面

起因 家庭中的内网下有一台ubuntu虚拟机&#xff0c;只能通过ssh终端操作或者通过实体机进行操作实在有些不方便。所以便想着通过linux远程桌面的方式进行连接&#xff0c;由于家庭内网&#xff0c;延迟还是非常低的。 步骤 首先在ubuntu虚拟机上安装xrdp&#xff08;可能已…

深度解析源码,Spring 如何使用三级缓存解决循环依赖

目录 一. 前言 二. 基础知识 2.1. 什么是循环依赖&#xff1f; 2.2. 三级缓存 2.3. 原理执行流程 三. 源码解读 3.1. 代码入口 3.2. 第一层 3.3. 第二层 3.4. 第三层 3.5. 返回第二层 3.6. 返回第一层 四. 原理深度解读 4.1. 什么要有三级缓存&#xff1f; 4.2.…

ToF传感器在移动机器人中的作用

原创 | 文 BFT机器人 在日新月异的机器人技术领域&#xff0c;技术的无缝整合正引领着人类与机器交互方式的革新潮流。ToF传感器作为变革性创新的一个例子&#xff0c;对移动机器人更好地感知周围环境起到了决定性的作用。 ToF传感器与激光雷达技术在创建深度图方面有着异曲同…