HDU-2041(DP)

超级楼梯

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 44254    Accepted Submission(s): 22616


Problem Description
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
 
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
 
Output
对于每个测试实例,请输出不同走法的数量
 
Sample Input
2
2
3
 
Sample Output
1
2
 
题意:就在那。
思路:dp。dp[i]表示上到第i级楼梯的方法。第i级楼梯的方法总数等于从第i-1级楼梯迈一步上来,或从第i-2级楼梯迈2步上来。所以dp[i] = dp[i-1]+dp[i-2]
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 int n, m;
 8 int dp[45];
 9 
10 int main()
11 {
12     dp[1] = 1;
13     for (int i = 2; i <= 40; i++){
14         dp[i] = dp[i-1]+dp[i-2];
15     }
16     scanf("%d", &n);
17     while(n--){
18         scanf("%d", &m);
19         printf("%d\n", dp[m]);
20     }
21     return 0;
22 }

 

 
posted @ 2016-02-27 14:07  喷水小火龙  阅读(57)  评论(0)    收藏  举报