重庆长寿网站建设网站开发专员

pingmian/2026/1/26 17:35:52/文章来源:
重庆长寿网站建设,网站开发专员,网站模板下载模板下载,做的网站需要买什么系统服务器代码随想录算法训练营第三十八天 | 理论基础#xff0c;509. 斐波那契数#xff0c;70. 爬楼梯#xff0c;746. 使用最小花费爬楼梯 理论基础什么是动态规划动态规划的解题步骤动态规划应该如何debug 509. 斐波那契数递归解法 70. 爬楼梯746. 使用最小花费爬楼梯 理论基础 视… 代码随想录算法训练营第三十八天 | 理论基础509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯 理论基础什么是动态规划动态规划的解题步骤动态规划应该如何debug 509. 斐波那契数递归解法 70. 爬楼梯746. 使用最小花费爬楼梯 理论基础 视频讲解 什么是动态规划 如果某一问题有很多重叠子问题使用动态规划是最有效的所以动态规划中每一个状态一定是由上一个状态推导出来的这一点就区分于贪心贪心没有状态推导而是从局部直接选最优的例如有N件物品和一个最多能背重量为W 的背包第i件物品的重量是weight[i]得到的价值是value[i]每件物品只能用一次求解将哪些物品装入背包里物品价值总和最大动态规划中dp[j]是由dp[j-weight[i]]推导出来的然后取max(dp[j], dp[j - weight[i]] value[i])但如果是贪心呢每次拿物品选一个最大的或者最小的就完事了和上一个状态没有关系所以贪心解决不了动态规划的问题其实大家也不用死扣动规和贪心的理论区别后面做做题目自然就知道了而且很多讲解动态规划的文章都会讲最优子结构啊和重叠子问题啊这些这些东西都是教科书的上定义晦涩难懂而且不实用大家知道动规是由前一个状态推导出来的而贪心是局部直接选最优的对于刷题来说就够用了上述提到的背包问题后序会详细讲解 动态规划的解题步骤 对于动态规划问题我将拆解为如下五步曲这五步都搞清楚了才能说把动态规划真的掌握了 确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 动态规划应该如何debug 找问题的最好方式就是把dp数组打印出来看看究竟是不是按照自己思路推导的做动规的题目写代码之前一定要把状态转移在dp数组的上具体情况模拟一遍心中有数确定最后推出的是想要的结果 509. 斐波那契数 题目链接 视频讲解 斐波那契数 通常用 F(n) 表示形成的序列称为 斐波那契数列该数列由 0 和 1 开始后面的每一项数字都是前面两项数字的和也就是 F(0) 0F(1) 1 F(n) F(n - 1) F(n - 2)其中 n 1 给定 n 请计算 F(n) 输入n 4 输出3动规五部曲 这里我们要用一个一维dp数组来保存递归的结果确定dp数组以及下标的含义dp[i]的定义为第i个数的斐波那契数值是dp[i]确定递推公式为什么这是一道非常简单的入门题目呢因为题目已经把递推公式直接给我们了状态转移方程 dp[i] dp[i - 1] dp[i - 2];dp数组如何初始化题目中把如何初始化也直接给我们了如下 dp[0] 0; dp[1] 1;确定遍历顺序 从递归公式dp[i] dp[i - 1] dp[i - 2];中可以看出dp[i]是依赖 dp[i - 1] 和 dp[i - 2]那么遍历的顺序一定是从前到后遍历的举例推导dp数组按照这个递推公式dp[i] dp[i - 1] dp[i - 2]我们来推导一下当N为10的时候dp数组应该是如下的数列 0 1 1 2 3 5 8 13 21 34 55 如果代码写出来发现结果不对就把dp数组打印出来看看和我们推导的数列是不是一致的 class Solution { public:int fib(int N) {if (N 1) return N;vectorint 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 1) return N;int dp[2];dp[0] 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];} };递归解法 class Solution { public:int fib(int N) {if (N 2) return N;return fib(N - 1) fib(N - 2);} };70. 爬楼梯 题目链接 视频讲解 假设你正在爬楼梯需要 n 阶你才能到达楼顶每次你可以爬 1 或 2 个台阶你有多少种不同的方法可以爬到楼顶呢 输入n 3 输出3本题如果没有接触过的话会感觉比较难多举几个例子就可以发现其规律爬到第一层楼梯有一种方法爬到二层楼梯有两种方法那么第一层楼梯再跨两步就到第三层 第二层楼梯再跨一步就到第三层所以到第三层楼梯的状态可以由第二层楼梯 和 到第一层楼梯状态推导出来那么就可以想到动态规划了 我们来分析一下动规五部曲 定义一个一维数组来记录不同楼层的状态 1.确定dp数组以及下标的含义 dp[i] 爬到第i层楼梯有dp[i]种方法 2.确定递推公式 如何可以推出dp[i]呢从dp[i]的定义可以看出dp[i] 可以有两个方向推出来首先是dp[i - 1]上i-1层楼梯有dp[i - 1]种方法那么再一步跳一个台阶不就是dp[i]了么还有就是dp[i - 2]上i-2层楼梯有dp[i - 2]种方法那么再一步跳两个台阶不就是dp[i]了么那么dp[i]就是 dp[i - 1]与dp[i - 2]之和所以dp[i] dp[i - 1] dp[i - 2]在推导dp[i]的时候一定要时刻想着dp[i]的定义否则容易跑偏这体现出确定dp数组以及下标的含义的重要性 3.dp数组如何初始化 再回顾一下dp[i]的定义爬到第i层楼梯有dp[i]种方法那么i为0dp[i]应该是多少呢这个可以有很多解释但基本都是直接奔着答案去解释的例如强行安慰自己爬到第0层也有一种方法什么都不做也就是一种方法即dp[0] 1相当于直接站在楼顶但总有点牵强的成分那还这么理解呢我就认为跑到第0层方法就是0啊一步只能走一个台阶或者两个台阶然而楼层是0直接站楼顶上了就是不用方法dp[0]就应该是0.其实这么争论下去没有意义大部分解释说dp[0]应该为1的理由其实是因为dp[0]1的话在递推的过程中i从2开始遍历本题就能过然后就往结果上靠去解释dp[0] 1从dp数组定义的角度上来说dp[0] 0 也能说得通需要注意的是题目中说了n是一个正整数题目根本就没说n有为0的情况所以本题其实就不应该讨论dp[0]的初始化我相信dp[1] 1dp[2] 2这个初始化大家应该都没有争议的所以我的原则是不考虑dp[0]如何初始化只初始化dp[1] 1dp[2] 2然后从i 3开始递推这样才符合dp[i]的定义 4.确定遍历顺序 从递推公式dp[i] dp[i - 1] dp[i - 2];中可以看出遍历顺序一定是从前向后遍历的 5.举例推导dp数组 举例当n为5的时候dp tabledp数组应该是这样的 如果代码出问题了就把dp table 打印出来看看究竟是不是和自己推导的一样此时大家应该发现了这不就是斐波那契数列么唯一的区别是没有讨论dp[0]应该是什么因为dp[0]在本题没有意义 class Solution { public:int climbStairs(int n) {if (n 1) return n; // 因为下面直接对dp[2]操作了防止空指针vectorint dp(n 1);dp[1] 1;dp[2] 2;for (int i 3; i n; i) { // 注意i是从3开始的dp[i] dp[i - 1] dp[i - 2];}return dp[n];} };746. 使用最小花费爬楼梯 题目链接 视频讲解 给你一个整数数组 cost 其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用一旦你支付此费用即可选择向上爬一个或者两个台阶你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯请你计算并返回达到楼梯顶部的最低花费 输入cost [1,100,1,1,1,100,1,1,100,1] 输出61.确定dp数组以及下标的含义 使用动态规划就要有一个数组来记录状态本题只需要一个一维数组dp[i]就可以了dp[i]的定义到达第i台阶所花费的最少体力为dp[i]对于dp数组的定义一定要清晰 2.确定递推公式 可以有两个途径得到dp[i]一个是dp[i-1] 一个是dp[i-2]dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] cost[i - 1]dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] cost[i - 2]那么究竟是选从dp[i - 1]跳还是从dp[i - 2]跳呢一定是选最小的所以dp[i] min(dp[i - 1] cost[i - 1], dp[i - 2] cost[i - 2]); 3.dp数组如何初始化 看一下递归公式dp[i]由dp[i - 1]dp[i - 2]推出既然初始化所有的dp[i]是不可能的那么只初始化dp[0]和dp[1]就够了其他的最终都是dp[0]dp[1]推出那么 dp[0] 应该是多少呢 根据dp数组的定义到达第0台阶所花费的最小体力为dp[0]那么有同学可能想那dp[0] 应该是 cost[0]例如 cost [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] 的话dp[0] 就是 cost[0] 应该是1这里就要说明本题力扣为什么改题意而且修改题意之后 就清晰很多的原因了新题目描述中明确说了 “你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。” 也就是说 到达 第 0 个台阶是不花费的但从 第0 个台阶 往上跳的话需要花费 cost[0]所以初始化 dp[0] 0dp[1] 0; 4.确定遍历顺序 最后一步递归公式有了初始化有了如何遍历呢本题的遍历顺序其实比较简单简单到都忽略了思考这一步直接就把代码写出来了因为是模拟台阶而且dp[i]由dp[i-1]dp[i-2]推出所以是从前到后遍历cost数组就可以了但是稍稍有点难度的动态规划其遍历顺序并不容易确定下来。 例如01背包都知道两个for循环一个for遍历物品嵌套一个for遍历背包容量那么为什么不是一个for遍历背包容量嵌套一个for遍历物品呢 以及在使用一维dp数组的时候遍历背包容量为什么要倒序呢这些都与遍历顺序息息相关 5.举例推导dp数组 拿示例2cost [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] 来模拟一下dp数组的状态变化如下 class Solution { public:int minCostClimbingStairs(vectorint cost) {vectorint dp(cost.size() 1);dp[0] 0; // 默认第一步都是不花费体力的dp[1] 0;for (int i 2; i cost.size(); i) {dp[i] min(dp[i - 1] cost[i - 1], dp[i - 2] cost[i - 2]);}return dp[cost.size()];} };

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

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

相关文章

网站开发技术发展企业网站设计步骤

今天是 2 月 14 日情人节,我看公众号后台有好多人在回复关键字:情人节表白代码。我想,我作为大家的校长,必须给大家送一波福利代码啊!我是真没想到,竟然很多程序员都想用代码表白,还整的挺浪漫的&#xff0…

网站建设超速云免费网页制作教程视频自学

目录 1. 修改源码,让模型能够生成出对于单个图像的标注。 2. 把数据转为yolo格式 3.把yolo格式转化为xml格式 这两天想偷懒,想让模型先在数据上标一遍,然后我再做修正,主要是图个省事。由于我们主要是利用paddle,模型也是基于p…

政务网站建设合同网站未备案可以上线吗

泛型 Generics泛型详解 使用泛型参数&#xff0c;有一个先决条件&#xff0c;必需在使用前对其进行声明&#xff1a; fn largest<T>(list: &[T]) -> T {该泛型函数的作用是从列表中找出最大的值&#xff0c;其中列表中的元素类型为 T。首先 largest<T> 对…

做网站怎么字体全部变粗了佛山营销型网站设计

本文介绍numpy数组中这四个方法的区别ndim、shape、dtype、astype。1.ndimndim返回的是数组的维度&#xff0c;返回的只有一个数&#xff0c;该数即表示数组的维度。2.shapeshape&#xff1a;表示各位维度大小的元组。返回的是一个元组。对于一维数组&#xff1a;有疑问的是为什…

医疗行业企业网站建设政企网站建设

【Arclist 标记】这个标记是DedeCms最常用的一个标记&#xff0c;也叫自由列表标记&#xff0c;其中 hotart、coolart、likeart、artlist、imglist、imginfolist、specart、autolist 这些标记都是由这个标记所定义的不同属性延伸出来的别名标记。功能说明&#xff1a;获取指定的…

南宁网站建设地方代运营有哪些套路坑

一模板&#xff1a; 模板不是数据类型&#xff0c;只能算是一种行为集合的表示。编译器在使用模板时&#xff0c;通过更换模板参数来创建数据类型。这个过程就是模板实例化(Instantiation)&#xff0c; 从模板类创建得到的类型称之为特例(specialization)&#xff0c;说白了就是…

做网站主页效果图有什么彩票网站做代理好点

在linux使用platform_driver_register() 注册 platform_driver 时&#xff0c; 需要在 platform_driver 的probe() 里面知道设备的中断号&#xff0c; 内存地址等资源。这些资源的描述信息存放在 resource 数据结构中&#xff0c; 相同的资源存放在一个树形树形数据结构中&…

sql数据库的网站迁移流程页面设计

在信息化、智能化浪潮席卷全球的今天&#xff0c;物联网SaaS平台作为推动工业数字化转型的重要工具&#xff0c;正日益受到广泛关注。那么&#xff0c;物联网SaaS平台究竟是什么&#xff1f;HiWoo Cloud作为物联网SaaS平台又有哪些独特优势&#xff1f;更重要的是&#xff0c;它…

网站推广手段有哪些cms的功能有哪些

在Java编程中&#xff0c;接口和抽象类是两个重要的概念。它们都用于实现面向对象编程中的抽象和封装&#xff0c;但在使用方式和功能上有所不同。本文将详细介绍Java中接口和抽象类的概念、用法和示例代码&#xff0c;帮助读者更好地理解和应用它们。 一、接口&#xff08;In…

建设电影网站选服务器怎么选鸿蒙os用什么语言开发app

linuxpython3.6.8uwsgipostgresqldjango部署web服务器 1.查看系统信息2.配置postgresql数据库2-1.安装postgresql数据库2-2.设置密码2-3.修改postgresql数据库配置文件 3.Python虚拟环境激活虚拟环境 4.Django4-1.Python 安装Django4-2.创建Django项目4-3.配置Django 5.uwsgi5-…

哪些经营范围可以开网站建设费用wordpress 设置显示中文字体

Jupyter Notebook是一个非常强大的工具&#xff0c;可以用于各种数据分析和机器学习任务&#xff0c;包括分类问题。在Jupyter Notebook中进行分类通常需要以下步骤&#xff1a; 导入所需的库&#xff1a;首先&#xff0c;你需要导入必要的Python库&#xff0c;例如NumPy、Pand…

微信分销网站建设比较好太原编程培训机构

本文并非基于微调训练模型&#xff0c;而是从头开始训练出一个全新的大语言模型的硬核教程。看完本篇&#xff0c;你将了解训练出一个大模型的环境准备、数据准备&#xff0c;生成分词&#xff0c;模型训练、测试模型等环节分别需要做什么。AI 小白友好~文中代码可以直接实操运…

漯河网站建设漯河wordpress pdf 打印

UNION ALL UNION ALL 用于合并两个或多个 SELECT 语句的结果。 请注意&#xff0c;UNION ALL 合并的每个 SELECT 语句必须是查询相同数量&#xff0c;相同数据类型的字段&#xff0c;且顺序也必须一致。另外结果集中的列名总是等于 UNION ALL 中第一个 SELECT 语句中的列名。 …

黄村专业网站建设公司网络推广员每天的工作是什么

RPA中国基于在科技行业的资源积累&#xff0c;以及对各领域「技术领导者」、「技术应用者」、「产品服务商」的深度调研&#xff0c;2023年&#xff0c;我们重点推出MI报告 ( Market Insight )、CI Vendor报告&#xff08;Comprehensive Influence Vendor&#xff09;两个系列。…

宁波五金网站建设小学生课程同步做网站软件

CopyOnWriteArraySet是CopyOnWriteArrayList类的弟弟。 这些是专用集合类&#xff0c;这些类是在JDK 1.5上添加的&#xff0c;以及它们最流行的表亲ConcurrentHashMap 。 它们是并发收集框架的一部分&#xff0c;位于java.util.concurrent包中。 CopyOnWriteArraySet最适合作为…

建设网站需要花费什么费用网站怎么样制作视频

流程控制 简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程。在一个程序执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的。我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候要通过控制语句的执行顺序来实现我们想要的功能…

做网站怎么那么难宝安营销型网站建设公司

社交媒体的崛起已经改变了新闻媒体的传播方式。从Facebook到Twitter&#xff0c;从Instagram到LinkedIn&#xff0c;社交媒体平台为新闻媒体提供了一个巨大且潜力无限的受众群体。要在这个竞争激烈的环境中引爆社交媒体&#xff0c;需要一些技巧和诀窍。在本篇文章中&#xff0…

wordpress用户名忘记可以优化网络的软件

信息摘要 区别于对称加密和非对称加密&#xff0c;信息摘要算数是一种不可逆的操作&#xff0c;无论输入数据的大小输出的数据长度是固定的信息摘要算数对输入很敏感&#xff0c;即使数据变化很细微&#xff0c;输出的结果会出现很大的差异从不同输入得到相同的输出的概率非常…

怎样做网站策划正规的代加工平台

目录 知识点 本节大纲思路 ——这里以我自己的为例—— cookie验证——————> login1.php-登录后台界面 login_check.php-检查&#xff0c;作为包含文件 add_news.php-后台界面 php编码 如何创建 Cookie&#xff1f;--setcookie() 语法 实例 1 php header跳转…

做电影网站都需要什么工具成立做网站的公司有哪些

目录 一、简介1.1、APM系统1.2、SkyWalking 简介 二、快速入门2.1、下载、启动2.2、界面认识 三、持久化存储四、告警通知五、自定义追踪-细粒度追踪service方法 一、简介 1.1、APM系统 APM&#xff08;Application Performance Monitoring&#xff09;系统是一种用于监控和管…