初识动态规划算法(题目加解析)

文章目录

  • 什么是动态规划
  • 正文
    • 力扣题
      • 第 N 个泰波那契数
      • 三步问题
      • 使用最小花费爬楼梯
  • 总结

什么是动态规划

线性动态规划:是可以用一个dp表来存储内容,并且找到规律存储,按照规律存储。让第i个位置的值等于题目要求的答案
>dp表:dp表就是用一个连续的空间存储需要存储的有规律的值。

干说无力直接正文

正文

力扣题

第 N 个泰波那契数

题目:地址
题目解析:
在这里插入图片描述

给定了三个数 T0,T1,T2
求Tn的值
**根据题意可以翻译成 Tn = Tn-1+Tn-2+Tn-**3

动态规则的题目都可以分五步
1、状态表示(★)
状态表示是必须要会的并且理解的
>一般的状态表示是:经验+题目解析
经验是要多写才能得出来的
这个题目的状态表示已经给出来了
Tn的值是前三个值的合
2、状态转移方程(★)
状态转移方程一般可以表示成 第n个值=····
题目已经给出Tn=Tn-1+Tn-2+Tn-3
3、初始化
把dp表初始化成0
4、填dp表顺序
从左往右填
5、返回值
dp[n]

代码答案:

class Solution {
public:int tribonacci(int n) {if(n==0){return 0;}if(n==1||n==2){return 1;}// vector<int> dp(n+1);// dp[0]=0,dp[1]=1,dp[2]=1;// for(int i =3;i<=n;i++)// {//     dp[i]=dp[i-1]+dp[i-2]+dp[i-3];// }//空间优化int a= 0,b=1,c=1,d=0;for(int i =3;i<=n;i++){d=a+b+c;a=b;b=c;c=d;}return d;}
};

三步问题

题目:地址
题目解析:
在这里插入图片描述
题目解释:

这个小男孩一小子可以走 1层/2层/3层
走到第n层的时候有多少种方法
如果结果太大需要%1000000007

动态规划的五步走:
1、状态表示(★)
这个题目的状态表示是
在这里插入图片描述

2、状态转移方程(★)
依照上面的解释
动态方程为Tn = Tn-1+Tn-2+Tn-3
3、初始化
初始化dp表为0
4、存储dp表的顺序
从左往右
5、返回值
dp[n]

代码:

class Solution {
public:int waysToStep(int n) {if(n==1||n==2){return n;}if(n==3){return 4;}// vector<int> dp(n+1);// dp[1] = 1,dp[2]=2,dp[3]=4;//空间优化int a =1,b=2,c=4,d=0;for(int i = 4 ;i<=n;i++){//dp[i]=((dp[i-1]+dp[i-2])%1000000007+dp[i-3])%1000000007;d=((a+b)%1000000007+c)%1000000007;a=b;b=c;c=d;}return d;}
};

使用最小花费爬楼梯

题目:地址
题目解析:
在这里插入图片描述
题目解释:

一个人一下可以走1-2步
最少需要花费多少体力到楼顶
这里的楼顶不是传过来的字符串的位置
因为如果是传过来的字符串的位置那么应该不用+他的值
但是用例1来说
10直接2步到10应该是最快的
但是解释是15
所以楼顶的位置应该在传过来字符的后一个位置

五步走:

1、状态表示
在这里插入图片描述

2、状态转移方程
方程是:dp[i]=min(cost[i-1]+dp[i-1],cost[i-2]+dp[i-2])
3、初始化
把dp表初始化
4、存入dp表的位置
从做向右
5、返回值
返回dp[i]位置的值

代码:

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

总结

这三个题的是类似的
都是用前几个数来对比或者相加
可能在解释的时候有些不好理解,作者也是刚学不久,分享一下自己的看法,喜欢的可以点点赞。

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

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

相关文章

SpringBoot——嵌入式 Servlet容器

一、如何定制和修改Servlet容器的相关配置 前言&#xff1a; SpringBoot在Web环境下&#xff0c;默认使用的是Tomact作为嵌入式的Servlet容器&#xff1b; 【1】修改和server相关的配置&#xff08;ServerProperties实现了EmbeddedServletContainerCustomizer&#xff09;例如…

Python 中 ConnectionRefusedError: [Errno 111] Connection Refused 错误

此错误表明客户端无法连接到服务器脚本系统上的端口。 既然能ping通服务器&#xff0c;应该不会吧。 这可能是由多种原因引起的&#xff0c;例如到目的地的路由不正确。 第二种可能性是您的客户端和服务器之间有防火墙&#xff0c;它可能在服务器上&#xff0c;也可能在客户端…

欢迎回到 C++ - 现代 C++(心得-壹)

原文链接欢迎回到 C - 现代 C | Microsoft Learn 这里先是讲了现代c的优势&#xff0c;其相对于其他编程语言有快速、高效。 相对于其他语言&#xff0c;该语言更加灵活&#xff0c;跨平台&#xff08;硬件平台&#xff09;性也很强&#xff0c;可以直接访问硬件&#xff0c;虽…

第三方UI组件库的样式修改

一、场景&#xff1a; 一般来说&#xff0c;我们在使用第三方UI组件库&#xff08;如&#xff1a;vant&#xff0c;element-plus等&#xff09;时&#xff0c;UI组件库自带的样式不能满足用户的个性化需求时&#xff0c;就需要我们开发人员自己动手对组件库的局部样式进行修改。…

Robot Grasp[Code with paper]

题目/摘要重点 Deep Object Pose Estimation for Semantic Robotic Grasping of Household Objects 使用合成数据为机器人训练深度神经网络 操纵有望获得几乎无限数量的预标记 训练数据。合成数据一直在弥合所谓的现实差距&#xff0c;因此 在合成数据上训练的网络在暴露于现…

PoE技术详解

标准的五类网线有四对双绞线&#xff0c;IEEE 802.3af和IEEE 802.3at允许两种用法&#xff1a;通过空闲线对供电或者数据线对供电。IEEE 802.3bt允许通过空闲线对供电、通过数据线对供电或者空闲线对和数据线对一起供电&#xff0c;如图16.1所示。 图 16.1 PoE供电线对 当在一…

考研英语语法(三十九)

平行结构-分类 名词&#xff08;词组&#xff09;的平行并列 The English,the Germans,the Dutch and the French were investing in Britains former colony The English ,the Germans ,the Dutch and the French The networked com…

整数的立方和

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

入门指南:使用Element UI构建漂亮的Vue.js应用

文章目录 &#x1f342;引言&#x1f342;安装并引入Element UI&#x1f342;使用Element UI组件&#x1f342;更多常用组件&#x1f341;Button 按钮&#x1f341;Input 输入框&#x1f341;Radio 单选框&#x1f341;Checkbox 多选框&#x1f341;Select 选择器&#x1f341;…

用取样思想一探AIX上进程性能瓶颈

本篇文章也是我在解决客户问题时的一些思路&#xff0c;希望对读者有用。 本文与GDB也与DBX&#xff08;AIX上的调试工具&#xff09;无关&#xff0c;只是用到了前文《GDB技巧》中的思想&#xff1a;取样思想 客户问题&#xff1a; 原始问题是磁盘被占满了&#xff0c;通过…

C++ 系列 第四篇 C++ 数据类型上篇—基本类型

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建&#xff08;WSL 方向&#xff09;-CSDN博客 C 系列 第二篇 你真的了解C吗&#xff1f;本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 前言 面向对象编程(OOP)的…

Star 10.4k!推荐一款国产跨平台、轻量级的文本编辑器,内置代码对比功能

notepad 相信大家从学习这一行就开始用了&#xff0c;它是开发者/互联网行业的上班族使用率最高的一款轻量级文本编辑器。但是它只能在Windows上进行使用&#xff0c;而且正常来说是收费的&#xff08;虽然用的是pj的&#xff09;。 对于想在MacOS、Linux上想使用&#xff0c;…

不瞒各位,不安装软件也能操作Xmind文档

大家好&#xff0c;我是小悟 作为搞技术的一个人群&#xff0c;时不时就要接收产品经理发过来的思维脑图&#xff0c;而此类文档往往是以Xmind编写的&#xff0c;如果你的电脑里面没有安装Xmind的话&#xff0c;不好意思&#xff0c;是打不开这类后缀结尾的文档。 打不开的话…

TensorRT-LLM保姆级教程(二)-离线环境搭建、模型量化及推理

随着大模型的爆火&#xff0c;投入到生产环境的模型参数量规模也变得越来越大&#xff08;从数十亿参数到千亿参数规模&#xff09;&#xff0c;从而导致大模型的推理成本急剧增加。因此&#xff0c;市面上也出现了很多的推理框架&#xff0c;用于降低模型推理延迟以及提升模型…

即兴语录-即兴小索奇语录

如果你想要实现自己的梦想&#xff0c;就不能害怕失败。因为失败是成功的垫脚石。 谁说失败了就一定是坏事&#xff1f;其实每一次失败都是一次成功的垫脚石。只有经历过失败的人&#xff0c;才能更好地理解成功的滋味。

处理器中的TrustZone之安全状态

在这个主题中&#xff0c;我们将讨论处理器内对TrustZone的支持。其他部分则涵盖了在内存系统中的支持&#xff0c;以及建立在处理器和内存系统支持基础上的软件情况。 3.1 安全状态 在Arm架构中&#xff0c;有两个安全状态&#xff1a;安全状态和非安全状态。这些安全状态映射…

改善你的登录页:登录设计的极致指南!

登录页面相当于产品的立面。无论是网站还是APP&#xff0c;用户打开后&#xff0c;首先映入眼帘的就是登录页面&#xff0c;用户在这里进行下一步的操作。如果登录页面的UI设计错误&#xff0c;界面视觉混乱&#xff0c;往往会在用户详细了解产品之前关闭并离开。希望大家通过这…

【qml入门系列教程】:qml QtObject用法介绍

作者:令狐掌门 技术交流QQ群:675120140 博客地址:https://mingshiqiang.blog.csdn.net/ 文章目录 QtObject 是 Qt/QML 中的一个基础类型,通常用作创建一个没有 UI 的(不渲染任何东西的)纯逻辑对象。可以使用它来组织代码、存储状态或者作为属性和方法的容器。 以下是如何…

dp-拦截导弹2

所有代码均来自于acwing中的算法基础课和算法提高课 Description 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c; 但是以后每一发炮弹都不能高于前一发的高度。…

Python神器:快速删除文本文件中指定行的方法

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 1. 简介 文件操作是编程中的重要方面。Python作为强大的编程语言&#xff0c;提供了处理文件的能力。删除特定行是文件处理中常见的需求。 2. 打开文件和读取内容 当打开文件并读取其内容时&#xff0c;open(…