当前位置: 首页 > article >正文

【动态规划篇】1137. 第 N 个泰波那契数

在这里插入图片描述
在这里插入图片描述

前言:

动态规划问题一般分为五步:

  1. 先确定一个状态表示
  2. 根据状态表示来推导状态方程
  3. 初始化
  4. 填表顺序
  5. 返回值

①状态表示

  • 先创建一个以为数组,起名为dp,这个一维数组就叫做dp
    在这里插入图片描述
  • dp表填满,填满后的某个值就是我们想要的结果
  • 状态表示是什么呢?dp表中某个值所表示的含义 。
  • 怎么来的呢?ⓐ根据题目要求ⓑ经验+题目要求ⓒ分析题目过程中发现重复子问题

➁状态转移方程(即dp[i]是什么)

  • 例如下面的这道题中的dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

➂初始化

  • 保证填表的时候不越界,dp[i] = dp[i-1] + dp[i-2] + dp[i-3],所以前三个位置会越界
  • 初始化 dp[0] = 0, dp[1] = dp[2] = 1

➃填表顺序

  • 为了填写当前状态的时候,所需要的状态已经算过了

➄返回值

  • 题目要求+状态表示

1137. 第 N 个泰波那契数

题目链接: 1137. 第 N 个泰波那契数
题目叙述: 泰波那契序列 Tn 定义如下:
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

示例 1:

输入:n = 4
输出: 4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4

示例 2:

输入: n = 25
输出: 1389537


解题思路:

  1. 状态表示
    创建一个dp表,让dp表中dp[0]表示第0个泰波那契数,dp[1]表示第1个泰波那契数…dp[i]表示第i个泰波那契数
  2. 状态转移方程
    题目中为 Tn+3 = Tn + Tn+1 + Tn+2处理一下得 Tn = Tn-3 + Tn-2 + Tn-1,所以状态方程为dp[i] = dp[i-1]+ dp[i-2] + dp[i-3]
  3. 初始化
    dp[0] = 0,dp[1] = dp[2] = 1
  4. 填表顺序
    要求填4的时候3已经计算过了,所以填表顺序为从左向右
  5. 返回值
    返回dp[i]

代码实现:

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表dp[0] = 0,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)


动态规划空间优化 -滚动数组
 求dp[4]的时候dp[0]相当于浪费空间,当我们求后面的某个值时,前面的有些值我们就不需要了,这个时候就可以用 滚动数组来优化。
在这里插入图片描述
abc求完d后,abc滚到下面
代码实现:

class Solution {
public:int tribonacci(int n) {//处理细节问题if(n==0) return 0;if(n==1||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;}
};

👍 如果对你有帮助,欢迎:

  • 点赞 ⭐️
  • 收藏 📌
  • 关注 🔔

相关文章:

【动态规划篇】1137. 第 N 个泰波那契数

前言&#xff1a; 动态规划问题一般分为五步&#xff1a; 先确定一个状态表示根据状态表示来推导状态方程初始化填表顺序返回值 ①状态表示 先创建一个以为数组&#xff0c;起名为dp,这个一维数组就叫做dp表 把dp表填满&#xff0c;填满后的某个值就是我们想要的结果状态表…...

MySQL事务深度解析:ACID特性、隔离级别与MVCC机制

引言 在数据库系统中&#xff0c;​事务是保障数据一致性与完整性的核心机制。MySQL通过ACID特性、多级隔离策略和MVCC&#xff08;多版本并发控制&#xff09;实现了高性能与高可靠性的平衡。本文将从底层原理出发&#xff0c;系统解析事务的四大特性、隔离级别的实现逻辑&am…...

网络信息安全专业(710207)网络安全攻防实训室建设方案

一、引言 随着信息技术的飞速发展&#xff0c;网络空间安全已成为国家安全的重要组成部分&#xff0c;对网络信息安全专业人才的需求日益增长。为满足网络信息安全专业&#xff08;专业代码710207&#xff09;的教学需求&#xff0c;提升学生在网络安全攻防领域的实践能力&…...

【Linux】:线程池

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来线程池相关的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结构…...

共享内存(System V)——进程通信

个人主页&#xff1a;敲上瘾-CSDN博客 进程通信&#xff1a; 匿名管道&#xff1a;进程池的制作&#xff08;linux进程间通信&#xff0c;匿名管道... ...&#xff09;-CSDN博客命名管道&#xff1a;命名管道——进程间通信-CSDN博客 目录 一、共享内存的原理 二、信道的建立 …...

ctfhub-HTTP协议

请求方式 它要我们使用CTF**B Method,其实就是ctfhub方式 我们直接抓包试一试&#xff0c;把GET改成CTFHUB,在发送到repeater 在repeater处点击发送&#xff0c;得到响应 302跳转 点击“give me flag"没有任何变化&#xff0c;我们抓个包试试 我们把它发送到repeater&…...

【TMS570LC4357】之工程创建

备注&#xff1a;具体资料请在官网海淘.TMS570LC4357资料 在线文档Hercules Safety MCU Resource Guide — Hercules Safety MCUs Documentation XDS100 Debug Probe (ti.com) Git https://git.ti.com/git/hercules_examples/hercules_examples.git https://git.ti.com/cgit/h…...

一种改进的Estimation-of-Distribution差分进化算法

为了充分利用差分进化&#xff08;DE&#xff09;的强大开发和estimation-of-distribution算法&#xff08;EDA&#xff09;的强大探索&#xff0c;提出了一种混合estimation-of-distribution算法的改进差分进化IDE-EDA。首先&#xff0c;提出了一种新的协同进化框架&#xff0…...

正则表达式(复习)

文章目录 一、[]: 一个字符集合二、{}: 重复次数三、特殊符号四、(): 分组五、python代码示例六、注意 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个…...

大数据学习(61)-Impala与Hive计算引擎

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

洛谷每日1题-------Day18__P1320 压缩技术(续集版)

题目描述 设某汉字由 NN 的 0 和 1 的点阵图案组成。 我们依照以下规则生成压缩码。连续一组数值&#xff1a;从汉字点阵图案的第一行第一个符号开始计算&#xff0c;按书写顺序从左到右&#xff0c;由上至下。第一个数表示连续有几个 0&#xff0c;第二个数表示接下来连续有…...

[数据结构]排序之希尔排序( 缩小增量排序 )

希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a; 先选定一个整数&#xff0c;把待排序文件中所有记录分成个 组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xff0c;取&#xff0c;重复上述分组和排序的工 作。当…...

LORA中 软提示是什么

LORA中 软提示是什么 软提示的原理概述 软提示(Soft Prompt)是提示学习(Prompt Learning)中的一种技术,主要用于引导预训练语言模型在特定任务上的表现。传统的提示学习通常使用硬提示(Hard Prompt),也就是在输入文本中添加固定的离散文本,比如在情感分析任务里,在…...

问问 DeepSeek 什么是网络爬虫

在现代互联网时代&#xff0c;信息的获取和整理变得至关重要&#xff0c;而爬虫&#xff08;Web Crawler&#xff09; 是一种自动化工具&#xff0c;帮助我们从网页上提取数据。爬虫在新闻采集、商品比价、天气数据收集等方面应用广泛。 爬虫的工作原理 爬虫的基本工作流程如下…...

进程(下)【Linux操作系统】

文章目录 进程的状态R状态&#xff1a;S状态&#xff1a;D状态&#xff1a;T状态t状态Z状态&#xff1a;孤儿进程X状态&#xff1a; 进程的优先级如果我们要修改一个进程的优先级重置进程优先级 进程切换进程的调度 进程的状态 在内核中&#xff0c;进程状态的表示&#xff0c…...

Insar结合ISCE2,某一个文件进行并行-stackSentinel.py

stackSentinel.py 依次执行 run_01 到 run_15&#xff0c;记录各自的日志 并行执行 run_16 里的所有命令&#xff0c;仍然记录日志 不知道对不对&#xff0c;测试的时间有点长就给停了 #!/bin/bash# ✅ 适用于 WSL/Linux runfiles_path"/mnt/e/insar_order_test/Stack…...

2.2.3 TCP—UDP-QUIC

文章目录 2.2.3 TCP—UDP-QUIC1. TCP如何做到可靠性传输1. ACK机制2. 重传机制3. 序号机制4. 窗口机制5. 流量机制6. 带宽机制 2. tcp和udp如何选择1. tcp和udp格式对比2. ARQ协议&#xff08;Automatic Repeat reQuest&#xff0c;自动重传请求&#xff09;1. ARQ协议的主要类…...

golang从入门到做牛马:第十九篇-Go语言类型转换:数据的“变形术”

在Go语言中,类型转换是一种将一种数据类型的变量转换为另一种类型的变量的操作。类型转换在处理不同类型的数据时非常有用,尤其是在需要将数据从一种类型转换为另一种类型进行计算或存储时。接下来,让我们一起深入了解Go语言中的类型转换。 什么是类型转换:数据的“变形术”…...

【Golang】第一弹-----初步认识GO语言

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;Golang &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 一、Go语言的简单介绍 1、G…...

K8S学习之基础二十三:k8s的持久化存储之nfs

K8S持久化存储之nfs ​ 在 Kubernetes (k8s) 中使用 NFS&#xff08;Network File System&#xff09;作为存储解决方案是一种常见的方式&#xff0c;特别是在需要共享存储的场景中。以下是关于如何在 Kubernetes 中使用 NFS 存储的详细说明&#xff1a; 1. 准备 NFS 服务器 …...

【Linux通信篇】深入理解进程间通信——管道

--------------------------------------------------------------------------------------------------------------------------------- 每日鸡汤&#xff1a;找一个对的人&#xff0c;然后好好去爱。一个你跟他在一起&#xff0c;然后又可以舒舒服服做自己的人。 -------…...

「 DelegateUI 」Ant-d 风格的 Qt Qml UI 套件

写在前面&#xff1a;关于为什么要写一套新的UI框架 一方面&#xff0c;Qt Qml 生态中缺乏一套既遵循现代设计规范(自带的功能少且丑,懂得都懂)&#xff0c;又能深度整合 Qt 生态的开源组件库。 另一方面&#xff0c;Qt Qml 中也有一些其他方案&#xff0c;例如 FluentUI Qml…...

Redis--Set类型

目录 一、引言 二、介绍 三、命令 1.sadd,smembers,sismember 2.spop&#xff0c;srandmember 3.smove&#xff0c;srem 4.sinter&#xff0c;sinterstore 5.sunion,sunionstore,sdiff,sdiffstore 四、内部编码 1.intset 2.hashtable 五、应用场景 1.使用Set保存用…...

【0013】Python数据类型-列表类型详解

如果你觉得我的文章写的不错&#xff0c;请关注我哟&#xff0c;请点赞、评论&#xff0c;收藏此文章&#xff0c;谢谢&#xff01; 本文内容体系结构如下&#xff1a; Python列表&#xff0c;作为编程中的基础数据结构&#xff0c;扮演着至关重要的角色。它不仅能够存储一系…...

文件上传靶场(10--20)

目录 实验环境&#xff1a; 具体内容实现&#xff1a; 第十关&#xff08;双写绕过&#xff09;&#xff1a; 第十一关&#xff1a;&#xff08;%00截断&#xff0c;此漏洞在5.2版本中&#xff09; 正确用法 错误用法 思路&#xff1a; 操作过程&#xff1a; 第十二关…...

C# 检查系统是否开启 Hyper - V

C# 检查系统是否开启 Hyper - V 在使用 C# 开发应用程序时&#xff0c;有时需要判断系统是否开启了 Hyper - V 功能。Hyper - V 是 Windows 系统提供的一款虚拟化技术&#xff0c;以下为你介绍几种在 C# 中检查系统是否开启 Hyper - V 的方法。 方法一&#xff1a;通过查询系…...

【前端】BOM DOM

两天更新完毕&#xff0c;建议关注收藏点赞 友情链接&#xff1a; HTML&CSS&LESS&Bootstrap&Emmet Axios & AJAX & Fetch BOM DOM 待整理 js2 Web API 是浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM)。官方文档点击跳转 目录 BOMDOM…...

K8s 1.27.1 实战系列(十一)ConfigMap

ConfigMap 是 Kubernetes 中管理非敏感配置的核心资源,通过解耦应用与配置实现灵活性和可维护性。 一、ConfigMap 的核心功能及优势 ​1、配置解耦 将配置文件(如数据库地址、日志级别)与容器镜像分离,支持动态更新而无需重建镜像。 ​2、多形式注入 ​环境变量:将键值…...

计算机网络——IP、MAC、ARP

一、IP地址 1. 什么是IP地址&#xff1f; IP地址&#xff08;Internet Protocol Address&#xff09;是互联网中设备的唯一逻辑标识符&#xff0c;类似于现实生活中的“门牌号”。它分为 IPv4&#xff08;32位&#xff0c;如 192.168.1.1&#xff09;和 IPv6&#xff08;128位…...

代码优化——基于element-plus封装组件:表单封装

前言 今天实现一个基于element-plus表单组件的二次封装&#xff0c;什么是二次封装&#xff1f;查看以下表单&#xff0c;传统表单组件是不是用<el-form>嵌套几个<el-form-item>即可实现&#xff0c;那么一个表单可不可以实现&#xff0c;传入一个对象给封装组件&a…...