一、动态规划解题模版
- 状态表示:一般创建一个一维数组 dp,把 dp 表填满,其中的某一个值就是结果。状态表示指 dp 表中元素的含义; 1.1. 来源:题目要求、经验 + 题目要求,分析问题的过程中的重复子问题。
- 状态转移方程:
dp[i] = ? - 初始化:保证根据状态转移方程填表时不越界。
- 填表顺序:为了填写当前状态的时候,所需要的状态已经计算过了。
- 返回值:题目要求 + 状态表示。
二、第 N 个泰波那契数
题目链接:第 N 个泰波那契数
题目描述:第四个数是前三个数的和,第一、二、三个数定为 0、1、1,返回第 n 个数。

题目解析:
解题思路:
- 状态表示:
dp[i]表示第 i 个泰波那契数。 - 状态转移方程:
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]。 - 初始化:
dp[0] = 0,dp[1] = 1,dp[2] = 1。 - 填表顺序:顺序从左向右填表即可。
- 返回值:
dp[n]。
解题代码:
// 时间复杂度:O(N)
// 空间复杂度:O(N)
class Solution {
public int tribonacci(int n) {
if (n < 3) return n == 0 ? 0 : 1;
// 创建 dp 表
int[] dp = new int[n + 1];
// 初始化
dp[] = ;
dp[] = dp[] = ;
( ; i <= n; i++) {
dp[i] = dp[i - ] + dp[i - ] + dp[i - ];
}
dp[n];
}
}




