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

【动态规划:斐波那契数列模型】第 N 个泰波那契数

在这里插入图片描述

1、第 N 个泰波那契数(easy)

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

提示:

  • 0 <= n <= 37

  • 答案保证是一个 32 位整数,即 answer <= 2^31 - 1


因为这是我们接触到的第一道动态规划题,所以要先知道一些概念,也就是动态规划的算法原理,它可以说分为以下几个步骤:

  1. 状态表示:简单地说,就是 dp[i] 表示什么!
    • 题目要求
    • 经验(多刷题)+ 题目要求
    • 分析问题过程中发现重复子问题
  2. 状态转移方程:简单地说,就是 dp[i] 如何通过已知的状态得到!
  3. 初始化
  4. 填表
  5. 返回值

​ 其中最重要的就是第一点,因为我们解题之前必须先搞清楚要的是什么一个状态,而最难的其实是第二点,得到状态转移方程,得到这个方程之后,基本这道题就解决了!

​ 除此之外还有一个步骤就是空间优化,这个只会在我们这道题和后面的背包问题会涉及到,因为最重要的不是空间优化,而是理解如何得到状态方程!

解题思路

​ 对于这道题,其实是不难的,首先确定我们的状态,这里只需要一维状态表即可,也就是一维数组,起名叫做 dp 吧,以后都是这样子的!

​ 对于这个状态表示,dp[i] 不用说,很明显表示第 i 个泰波那契数!

​ 对于状态转移方程,这道题直接给出了,所以说这道题不难,但是我们写成转移方程的时候一般都用 dp[i] 来表示,而不是题目中的 dp[i+3] 这样子,所以方程就是 dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

class Solution {
public:int tribonacci(int n) {// 创建dp表int dp[38];// 初始化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];}
};

​ 至于空间优化,其实很明显吧,因为每次其实我们用到的就是三个变量来推导,所以我们只需要用三个状态变量,加上一个结果变量来进行状态转移即可,就不用去开辟数组了,节省了空间,只不过要注意的是赋值顺序不要搞错了!

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, ret = 0;// 通过状态转移方程填表for(int i = 3; i <= n; ++i){ret = a + b + c;a = b;b = c;c = ret;}// 返回值return ret;}
};

在这里插入图片描述

http://www.xdnf.cn/news/9949.html

相关文章:

  • 英语学习5.29
  • Java开发经验——阿里巴巴编码规范实践解析5
  • 数字人系统源码搭建步骤
  • NHANES指标推荐:UAR
  • LINUX中TOMCAT安装和Nginx源码安装
  • 【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4
  • docker-compose部署SpringBoot项目的两种方式(构建镜像和挂载文件)
  • Python打卡第39天
  • Futaba乐迪小飞象Frsky7通多协议接收机KA6说明书
  • hf-mirror断点续传下载权重
  • AAOS系列之(六) ---CarPowerManager中写入的状态,如何在ViewRootImpl中读取问题
  • [git]忽略.gitignore文件
  • 软件项目需求说明书简要模板
  • 【Redis】大key问题详解
  • 【计网】分片
  • websocket在vue中的使用步骤,以及实现聊天
  • MaaS(模型即服务)是什么?
  • IT Tools 部署
  • 食材走T台?Coze+即梦应用实例:实现一键生成食材走秀视频!!(附提示词)
  • [C]基础18.自定义类型:联合和枚举
  • Python实例题:Python实现Zip文件的暴力破解
  • Spring Boot整活指南:从Helo World到“真香”定律
  • 29、请求处理-常用参数注解使用
  • UE路径追踪Path Tracing和Lumen的区别
  • Lambda表达式Stream流
  • 三套知识系统的实践比较:Notion、Confluence 与 Gitee Wiki
  • 关于 smali:2. 从 Java 到 Smali 的映射
  • 无需自建高防:APP遭遇DDoS的解决方案
  • CODEFORCES----1999A - A+B Again?
  • SQL进阶之旅 Day 7:视图与存储过程入门