动态规划的常规解题步骤:
- 状态表示
- 状态转移方程
- 初始化
- 返回值
状态表示
我们写动态规划问题会创建一个名为dp的数组,也就是dp表。
状态表示就是dp表里面的值的含义。那么dp表是根据什么来创建的呢?
- 1.题目要求
- 2.经验
- 3.分析问题的过程中,发现子问题。
状态转移方程
状态转移方程就是dp[i]等于什么,类似与数学中的方程表达式,比如dp[i]=dp[i-1]+dp[i-2]+dp[i-3];状态转移方程是动态规划的核心,也是最难点。
初始化
初始化的目的就是保证填dp表的时候不越界。
返回值
根据题目要求和状态转移方程返回符合题意的值
斐波那契型
斐波那契型就是当下的值与前一个或者前几个的值有关,所以状态转移方程经常是dp[i]=dp[i-1]+dp[i-2]+dp[i-3]等,或者是类似的变种。
例题
接下来我们以力扣的第1137题为例,来进行具体操作。
代码:
class Solution {
public int tribonacci(int n) {
//写dp表
//初始化
//状态表达式
//处理边境
//返回
if(n==0)return 0