算法日常・每日刷题--<动态规划>1

1137. 第 N 个泰波那契数 - 力扣(LeetCode)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 = 2T_4 = 1 + 1 + 2 = 4示例 2:输入:n = 25输出:1389537 提示: * 0 <= n <= 37 * 答案保证是一个 32 位整数,即 answer <= 2^31 - 1。https://leetcode.cn/problems/n-th-tribonacci-number/

题目简介

泰波那契序列 Tₙ 定义:

  • T₀ = 0,T₁ = 1,T₂ = 1
  • n ≥ 3 时,Tₙ = Tₙ₋₁ + Tₙ₋₂ + Tₙ₋₃

给定整数 n,返回第 n 个泰波那契数。

泰波那契数可以理解为三项版斐波那契数列,是动态规划非常经典的入门练习题。

动态规划五步

做 DP 题我习惯按这五步思考,不容易漏条件:

  1. dp 数组含义 :dp[i] 表示第 i 个泰波那契数的值
  2. 状态转移方程 :dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
  3. dp 数组初始化 :dp[0]=0,dp[1]=1,dp[2]=1
  4. 遍历顺序:从小到大正向遍历,后面的值依赖前面已经计算完成的值
  5. 返回结果 :dp[n]
cpp 复制代码
class Solution {
public:
    int tribonacci(int n) {
        // 定义dp[],有关dp[]的方程,初始化,从哪个方向开始填,返回值
        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];
        }
        return dp[n];
    }
};

我们还可以在此基础上添加对于空间上的优化

因为实际上用的dpi的求值只与前面三个有关,就不需要存储那么多;

相关推荐
邪修king1 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
拆房老料2 小时前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
张张123y3 小时前
后端第十四课:Agent 记忆系统(让 Agent 记住上下文和用户,跨会话不健忘)
java·大数据·人工智能·python·agent·记忆
曹牧7 小时前
C#:空合并运算符
java·前端·数据库
布吉岛的石头7 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
golang学习记8 小时前
IDEA 2026年的玩法已经完全不同
java·ide·intellij-idea
紧跟先前的步伐8 小时前
Go AI Agent 实战 05|Temperature 与生成参数:让模型输出可控
java·人工智能·golang
金銀銅鐵8 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨8 小时前
spring auth 核心流程详解
java·后端·spring
罗湖老棍子9 小时前
【例 1】Sightseeing Trip(信息学奥赛一本通- P1494)(洛谷-P10927)
数据结构·算法·图论·最短路·floyd·最小环