动态规划解题步骤:
1.确定状态表示:dp[i]是什么
2.确定状态转移方程:dp[i]等于什么
3.初始化:确保状态转移方程不越界
4.确定填表顺序:根据状态转移方程即可确定填表顺序
5.确定返回值
题目链接:面试题 08.01. 三步问题 - 力扣(LeetCode)
题解:
1.状态表示:dp[i]表示到第i个台阶有几种方法
2.状态转移方程:dp[i]=dp[i-1]+dp[i-2]+dp[i-3]
3.初始化:初始化dp[1]=1,dp[2]=2,dp[3]=4
4.填表顺序:从左向右
5.返回值:dp[n]
class Solution {
public:
int waysToStep(int n) {
//处理边界条件
if(n==1||n==2) return n;
else if(n==3) return 4;
//创建dp表
vector<int> dp(n+1);
//初始化
dp[1]=1;dp[2]=2;dp[3]=4;
//填表
for(int i=4;i<=n;++i)
dp[i]=((dp[i-1]+dp[i-2])%1000000007+dp[i-3])%1000000007;
//返回值
return dp[n];
}
};