前言
动态规划是解决重叠子问题和最优子结构问题的有效方法。本文通过分析泰波那契数、三步问题、最小花费爬楼梯及解码方法四个经典案例,详细阐述动态规划的核心要素。
一、1137. 第 N 个泰波那契数
题目链接: https://leetcode.cn/problems/n-th-tribonacci-number/description/
1. 题目解析
Tribonacci 数列是一个递归数列,类似于斐波那契数列,递推公式为 T(n) = T(n-1) + T(n-2) + T(n-3) (n >= 3),初始条件为 T(0)=0, T(1)=1, T(2)=1。
2. 算法原理
- 状态表示:设
dp[i]表示第 i 个 Tribonacci 数。 - 状态转移方程:
dp[i] = dp[i-1] + dp[i-2] + dp[i-3](i >= 3)。 - 初始化:
dp[0]=0,dp[1]=1,dp[2]=1。 - 填表顺序:从 i=3 开始递增计算。
- 返回值:返回
dp[n]。
3. 代码实现
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[0] = 0, dp[1] = 1, dp[2] = 1;
for (int i = ; i <= n; i++) {
dp[i] = dp[i - ] + dp[i - ] + dp[i - ];
}
dp[n];
}
};


