题目:
有一个楼梯,甲现在位于第0阶,每次可以上1阶,2阶,3阶,那么到达第N阶共有多少种走法?
Input
对于每组数据:
第一行,包含一个数字N。(1 <= N <= 30)
Output
对于每组数据:
第一行,输出到达第N阶共有多少种走法
Sample Input
1
2
10
Sample Output
1
2
274
递归:
#include<stdio.h>
int find(int n) {
if (n < 0)
return 0;
else if (n == 0)
return 1;
return find(n - 1) + find(n - 2) + find(n - 3);
}
int main(){
int N;
while (scanf("%d", &N))
printf("%d\n", find(N));
return 0;
}
记忆递归(备忘录):
#include<stdio.h>
#include<string.h>
int save[50];
int find(int n) {
if (n < 0)
return 0;
if (save[n] != -1)
return save[n];
return save[n] = find(n - 1) + find(n - 2) + find(n - 3);
}
int main(){
int N;
memset(save, -1, sizeof(save));
save[0] = 1;
while (scanf("%d", &N))
printf("%d\n", find(N));
return 0;
}
DP:
#include<stdio.h>
int main()
{
int N;
int dp[40] = {0};
dp[0] = 1;
for (int i = 0; i <= 30; i++) {
dp[i + 1] += dp[i];
dp[i + 2] += dp[i];
dp[i + 3] += dp[i];
}
while (scanf("%d", &N))
printf("%d\n",dp[N]);
}