題目: 超級台階
描述
有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少走法?
注:規定從一級到一級有0種走法。
輸入
輸入數據首先包含一個整數n(1<=n<=100),表示測試實例的個數,然後是n行數據,每行包含一個整數m,(1<=m<=40), 表示樓梯的級數。www.2cto.com
輸出
對於每個測試實例,請輸出不同走法的數量。
樣例輸入
2
2
3
樣例輸出
1
2
解題思路: 1:思路:DP+打表
2:假設當前在第i個台階,那麼由於一次能夠上一個或兩個台階,那麼就有,當前的台階可能由i-1而來,或由i-2而來,所以dp[i] = dp[i-1]+dp[i-2];
代碼:
[cpp]
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
#include <stack>
#include <queue>
#include <cmath>
#include <set>
using namespace std;
#define MAXN 41
int n , m;
int dp[MAXN];
void solve() {
dp[1] = 0 ; dp[2] = 1 ; dp[3] =2;
for(int i = 4 ; i <= MAXN; i++)
dp[i] = dp[i-1]+dp[i-2];
}
int main() {
//freopen("input.txt" , "r" , stdin);
solve() ; scanf("%d%*c" , &n);
while(n--){
scanf("%d%*c" , &m);
printf("%d\n" , dp[m]);
}
return 0;
}