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 }

浙公网安备 33010602011771号