超级楼梯
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 59 Accepted Submission(s) : 22
Problem Description
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
Output
对于每个测试实例,请输出不同走法的数量
Sample Input
2 2 3
Sample Output
1 2
Author
lcy
Source
2005实验班短学期考试类似于DP的模拟把
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 int N,M,i,a[100],sum; 7 scanf("%d",&N); 8 while(N--) 9 { 10 scanf("%d",&M); 11 for(i=0,sum=0;i<M;i++) 12 { 13 if(i==0) 14 { 15 a[i]=0;continue; 16 } 17 if(i==1) 18 { 19 a[i]=1;continue; 20 } 21 if(i==2) 22 { 23 a[i]=2;continue; 24 } 25 a[i]=a[i-1]+a[i-2]; 26 } 27 printf("%d ",a[M-1]); 28 } 29 return 0; 30 }
修改:2015.5.12(DP)
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <queue> 5 #include <algorithm> 6 #include <math.h> 7 using namespace std; 8 int DP[45]={0}; 9 int main() 10 { 11 int N,i,n; 12 for(i=2,DP[1]=1;i<=40;i++) 13 { 14 DP[i]=DP[i-1]+DP[i-2]; 15 } 16 scanf("%d",&N); 17 while(N--) 18 { 19 scanf("%d",&n); 20 printf("%d ",DP[n]); 21 } 22 return 0; 23 }