DP:斐波那契数列模型

                                                 创作不易,感谢三连支持 !

        斐波那契数列用于一维探索的单峰函数之中,用于求解最优值的方法。其主要优势为,在第一次迭代的时候求解两个函数值,之后每次迭代只需求解一次 。

一、第N个泰波那契数

. - 力扣(LeetCode)第N个泰波那契数

class Solution {
public:int tribonacci(int n) {//边界情况if(n==0||n==1) return n;if(n==2)  return 1;//建表vector<int> dp(n+1);dp[1]=dp[2]=1;//开始填表for(int i=3;i<=n;++i)  dp[i]=dp[i-1]+dp[i-2]+dp[i-3];return dp[n];}
};

时间复杂度O(N),空间复杂度为O(N)

是否还有可以优化的方法呢??那就是该题可以使用滚动数组! 

class Solution {
public:int tribonacci(int n) {//边界情况if(n==0||n==1) return n;if(n==2)  return 1;//滚动数组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;}
};

时间复杂度O(N),空间复杂度为O(1) 

二、三步问题

. - 力扣(LeetCode)三步问题

思路1:dp[i]表示从起点到达i位置一共有几种方法

class Solution {
public:int waysToStep(int n) {const int MOD=1e9+7;//边界情况if(n==1||n==2) return n;if(n==3) return 4;//建立dp表vector<int> dp(n+1);//初始化dp[1]=1,dp[2]=2,dp[3]=4;//填表for(int i=4;i<=n;++i)  dp[i]=((dp[i-1]+dp[i-2])%MOD+dp[i-3])%MOD;return dp[n];}
};

思路2:dp[i]表示从i位置到达终点一共有几种方法

class Solution {
public:int waysToStep(int n) {const int MOD=1e9+7;//边界情况if(n==1||n==2) return n;if(n==3) return 4;//建立dp表vector<int> dp(n);//初始化dp[n-1]=1,dp[n-2]=2,dp[n-3]=4;//填表for(int i=n-4;i>=0;--i)  dp[i]=((dp[i+1]+dp[i+2])%MOD+dp[i+3])%MOD;return dp[0];}
};

三、使用最小的花费爬楼梯

. - 力扣(LeetCode)使用最小的花费爬楼梯

方法1:dp[i]表示从起点到i台阶的最小花费

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

思路2:我们也可以以i为起点,让dp[i]表示到楼顶的最小花费

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) dp[i]=cost[i]+min(dp[i+1],dp[i+2]);return min(dp[0],dp[1]);}
};

四、解码方法

. - 力扣(LeetCode)解码方法

class Solution {
public:int numDecodings(string s) {int n=s.size();vector<int> dp(n);if(s[0]!='0') ++dp[0];//处理边界情况if(n==1)  return dp[0];if(s[1]!='0'&&s[0]!='0') dp[1]++;int t=(s[0]-'0')*10+(s[1]-'0');if(10<=t&&t<=26) ++dp[1];//开始填表for(int i=2;i<n;++i) {if(s[i]!='0') dp[i]+=dp[i-1];int t=(s[i-1]-'0')*10+(s[i]-'0');if(10<=t&&t<=26) dp[i]+=dp[i-2];}return dp[n-1];}
};

       我们会发现dp[1]的初始化和填表里面的过程非常相似,所以我们可以用一个动态规划的小技巧——虚拟节点(专门用来处理边界问题)

class Solution {
public:int numDecodings(string s) {int n=s.size();vector<int> dp(n+1);dp[0]=1;if(s[0]!='0') ++dp[1];//开始填表for(int i=2;i<=n;++i) {if(s[i-1]!='0') dp[i]+=dp[i-1];int t=(s[i-2]-'0')*10+(s[i-1]-'0');if(10<=t&&t<=26) dp[i]+=dp[i-2];}return dp[n];}
};

 先暂时更新到这,后面有新的题目会持续更新

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

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

相关文章

[LLM] 大模型基础|预训练|有监督微调SFT | 推理

现在的大模型在进行预训练时大部分都采用了GPT的预训练任务&#xff0c;即 Next token prediction。 要理解大语言模型&#xff08;LLM&#xff09;&#xff0c;首先要理解它的本质&#xff0c;无论预训练、微调还是在推理阶段&#xff0c;核心都是next token prediction&#…

Wireshark 抓包工具与长ping工具pinginfoview使用,安装包

一、Wireshark使用 打开软件&#xff0c;选择以太网 1、时间设置时间显示格式 这个时间戳不易直观&#xff0c;我们修改 2、抓包使用的命令 1&#xff09;IP地址过滤 ip.addr192.168.1.114 //筛选出源IP或者目的IP地址是192.168.1.114的全部数据包。 ip.sr…

ideaSSM 工厂效能管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 工厂效能管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff…

显卡基础知识及元器件原理分析

显卡应该算是是目前最为火热的研发方向了&#xff0c;其中的明星公司当属英伟达。 当地时间8月23日&#xff0c;英伟达发布截至7月30日的2024财年第二财季财报&#xff0c;营收和利润成倍增长&#xff0c;均超市场预期。 财报显示&#xff0c;第二财季英伟达营收为135.07 亿美…

leetcode 3075

leetcode 3075 题目 例子 思路 孩子的幸福值最低也是0&#xff0c;所以选择最大的值&#xff0c;被选孩子的幸福值最高。需要使用排序算法 代码实现 class Solution { public:long long maximumHappinessSum(vector<int>& happiness, int k) {//升序sort(happine…

基于SSM+Jsp+Mysql的高校二手交易平台

基于SSMJspMysql的高校二手交易平台 基于SSMJspMysql的高校二手交易平台的设计与实现 开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff0…

Robot Framework 入门指南:高效学习接口自动化测试

开源自动化测试利器&#xff1a;Robot Framework Robot Framework 是一个用于实现自动化测试和机器人流程自动化&#xff08;RPA&#xff09;的开放源代码框架。它由一个名为 Robot Framework Foundation 的组织得到推广&#xff0c;得到了多家领军企业在软件开发中的广泛应用…

移远通信,开启透明天线中的“创新密码”

近日&#xff0c;全球领先的物联网整体解决方案供应商移远通信正式对外宣布&#xff0c;其以远远领先行业的速度推出前沿技术成果——5G透明天线。该天线主体选用透明薄膜材质&#xff0c;具有性能优、重量轻、尺寸灵活、透明度高、环境融合度好等优势&#xff0c;特别适用于智…

处理器方法的返回值--返回对象Object

处理器方法也可以返回Object对象。这个Object可以是Integer&#xff0c;String&#xff0c;自定义对象&#xff0c; Map&#xff0c;List 等。但返回的对象不是作为逻辑视图出现的&#xff0c;而是作为直接在页面显示的数据出现的。 返回对象&#xff0c;需要使用ResponseBody注…

python第三次项目作业

打印课堂上图案 判断一个数是否是质数&#xff08;素数&#xff09; 设计一个程序&#xff0c;完成(英雄)商品的购买&#xff08;界面就是第一天打印的界面&#xff09; 展示商品信息(折扣)->输入商品价格->输入购买数量->提示付款 输入付款金额->打印购买小票&a…

九州家庭教育:关注孩子心理健康,增强亲子沟通

家庭教育现在越来越受重视&#xff0c;尤其孩子心理健康&#xff0c;当下社会&#xff0c;孩子心理健康问题频出&#xff0c;很多地方不时传出孩子轻生的新闻&#xff0c;这就是在教育过程中&#xff0c;沟通出现了严重问题&#xff0c;随着心理变化产生&#xff0c;孩子这时候…

在flutter项目中使用自己做的flutter插件

常规做法如下&#xff1a; 1. 将插件放在Flutter项目中 把插件项目放置在Flutter项目根目录下的一个特定文件夹中。这里&#xff0c;我是创建了一个文件夹&#xff0c;名字为plugins&#xff0c;并把插件项目复制进去。 2. 在Flutter项目中使用插件 在Flutter项目的 pubspec.…

电商API接口苏宁易购获得suning商品详情页实时数据API请求接入演示

要接入苏宁易购的API接口获取商品详情页实时数据&#xff0c;你需要遵循以下步骤&#xff1a; 注册成为开放平台的开发者&#xff0c;获取ApiKey和ApiSecret。 使用ApiKey和ApiSecret获取访问令牌&#xff08;AccessToken&#xff09;。 使用AccessToken调用苏宁易购的API接口…

FCN(全卷积神经网络)

目录 一、什么是FCN 1、FCN简介 2、核心思想 二、代码实现 1、FCN结构介绍 2、ResNet-18提取图像特征 3、11卷积层将通道数变换为类别个数 4、转置卷积还原输入图像的高和宽 5、初始化转置卷积层 6、读取数据集 7、训练 8、预测 三、总结 一、什么是FCN 1、FCN简介…

CSDN个人简介优化 html font属性

CSDN个人简介优化 html font属性 个人简介个人简介优化字体21种样式选择字体大小设置4号字体 字体颜色设计渐变色&#xff08;可惜不能显示&#xff09; 字体加粗设置 <b>标签 个人简介 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光…

Django日志(四)

一、Filters介绍 过滤器用于从logger传递给handler的哪些日志要做额外控制 默认情况下,满足日志级别的任何消息都将处理。只要级别匹配,任何日志消息都会被处理。不过,也可以通过添加 filter 来给日志处理的过程增加额外条件。例如,可以添加一个 filter 只允许某个特定来源…

Linux 文件系统:动静态库

目录 一、静态库 1、概念 2、为什么要打包成库 3、创建自定义静态库 4、使用Makefile创建静态库 5、使用静态库(导入系统) 6、删除静态库 7、使用静态库(不导入系统) 二、动态库 1、概念 2、生成动态库&#xff08;共享库&#xff09; 3、使用动态库的过程 4、Mak…

Python学习笔记02

第三章、Python判断语句 前言 进行逻辑判断&#xff0c;是生活中常见的行为。同样&#xff0c;在程序中&#xff0c;进行逻辑判断也是最为基础的功能。 如果 → 判断 → 是 → ... → 否 → ... 布尔类型和比较运算符 布尔类型 进行判断&#xff0c;只有2个结果&#xff…

产品说明书怎么制作?学会用模板事半功倍!

产品说明书常常被低估&#xff0c;但其实它是一个企业的名片&#xff0c;在阐述你的产品服务时大有作用。如果你在制作产品说明书上面花费大量的时间和精力&#xff0c;那么今天的文章可能会对你有所帮助。此文将会引领你了解如何制作产品说明书&#xff0c;以及推荐几款高效的…

【JS面试题 - 打印结果】++[[]][+[]] + [+[]]

现有一段代码&#xff0c;说出打印结果 [[]][[]] [[]]这道题考验的是运算符的基础知识&#xff0c;下面来逐步分析&#xff1a; 先把表达式按照优先级最低的运算符&#xff08;&#xff09;进行分割&#xff0c;得到两部分&#xff1a; [[]][[]] 和 [[]] [[]][[]] 表达式中…