前置知识
在正式开始动态规划的题目练习之前,我们来看看动态规划的一般步骤。
一般步骤:
- 状态表示:创建一个 dp 表,确定 dp[i] 的含义。通常结合经验与题目要求得出。
- 状态转移方程:推导 dp[i] 等于什么,如何由之前的状态得到当前状态。
- 初始化:保证填表时不越界。
- 填表顺序:确保计算当前状态所需的前置状态已计算完成。
- 返回结果:根据题目要求和状态表示返回最终结果。
接下来结合具体题目进行说明。
第 N 个泰波那契数

该题类似于斐波那契数列,但当前数是前三数之和。
- 状态表示:dp[i] 表示当前位置的泰波那契数。
- 状态转移方程:dp[i] = dp[i-1] + dp[i-2] + dp[i-3]。
- 初始化:当 i=1 时会出现越界,需初始化。根据题目:dp[0]=0, dp[1]=1, dp[2]=1。
- 填表顺序:从前向后依次推出后面。
- 返回结果:直接返回 dp[n]。
边界情况处理:n 的范围是 0~37,当 n=0, 1, 2 时直接返回对应值。
class Solution {
public:
int tribonacci(int n) {
// 1、创建 dp 表
vector<int> dp(n+1);
// 处理边界情况
if(n==0) return 0;
if(n==1||n==2) return 1;
dp[]=, dp[]=, dp[]=;
( i=; i<=n; i++) {
dp[i]=dp[i]+dp[i]+dp[i];
}
dp[n];
}
};












