wangjiajian • 2年前
#include <bits/stdc++.h> using namespace std;
int n; long long visited[80] = {0, 1, 2, 4};
long long dfs(int x) {
if(!visited[x])
visited[x] = dfs(x-1)+dfs(x-2)+dfs(x-3);
return visited[x];
}
int main() {
while(cin>>n)
cout << dfs(n) << '\n';
return 0;
}
评论:
这题不是DP入门题吗?
不对,应该可以是直接递推的。
f[i] = f[i - 1] + f[i - 2] + f[i - 3]
f[0] = 1
f[1] = 1
f[2] = 2
哦你注意一下,没有台阶的时候,他有且仅有一种方案,就是一步也不走。
如果要改进的话可以直接用矩阵快速幂解决哦。