-
题目描述:
-
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
-
输入:
-
输入可能包含多个测试样例,对于每个测试案例,
输入包括一个整数n(1<=n<=50)。
-
输出:
-
对应每个测试案例,
输出该青蛙跳上一个n级的台阶总共有多少种跳法。
-
样例输入:
-
6
-
样例输出:
-
32
推荐指数:※
来源:http://ac.jobdu.com/problem.php?pid=1389
到第n个台阶的跳法等于:先跳1级+再跳n-1的跳法,+ 先跳2级+再跳n-2的跳法,先跳3级+再跳n-3的跳法,+。。。+先跳n级+再跳0的跳法。
矩阵覆盖:http://blog.csdn.net/zhu_liangwei/article/details/9979247
变态跳台阶:http://blog.csdn.net/zhu_liangwei/article/details/9972557
跳台阶:http://blog.csdn.net/zhu_liangwei/article/details/9972303
斐波那契数列:http://blog.csdn.net/zhu_liangwei/article/details/9971293
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
const int N=51;
long long val[N];
long long f(const int n){
if(n==1)
return 1;
else if(n==2)
return 2;
else{
int i;
long long sum=0;
for(i=n-1;i>=1;i--){
if(val[i]==0)
val[i]=f(i);
sum+=val[i];
}
return sum+1;
}
}
int main()
{
int n;
memset(val,0,sizeof(val));
while(scanf("%d",&n)!=EOF){
printf("%lld\n",f(n));
}
return 0;
}