题目描述
https://leetcode.cn/problems/three-steps-problem-lcci/description/
解法(动态规划)
dp算法流程
- 状态表⽰:
这道题可以「根据题⽬的要求」直接定义出状态表⽰:
dp[i] 表⽰:第i个泰波那契数的值。 - 状态转移⽅程:
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] - 取模:
要两两相加时就进行取模,如果是三个加起来取模或者每个都取模则会溢出
代码
dp:
class Solution {
public:
const int mod = 1000000007;
int waysToStep(int n) {
if(n == 1 || n == 2) return n;
if(n == 3) return 4;
int *dp = new int[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]) % mod + dp[i - 3] % mod) % mod;
return dp[n];
}
};