時間限制:1000 ms | 內存限制:65535 KB
難度:3
描述
有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少走法?
注:規定從一級到一級有0種走法。
輸入
輸入數據首先包含一個整數n(1<=n<=100),表示測試實例的個數,然後是n行數據,每行包含一個整數m,(1<=m<=40), 表示樓梯的級數。
輸出
對於每個測試實例,請輸出不同走法的數量。
樣例輸入
2
2
3
樣例輸出
1
2
還是簡單的動態規劃
這裏dp(i)表示從第一級到第i級的走法
因爲每次只能跨上一級或二級,我們可以發現,第i級的走法就由第i-1級和第i-2級的情況而來
所以dp(i)=dp(i-1)+dp(i-2)
注意題中的規定從一級到一級有0種走法,那麼dp(1)=0
dp(2)=1
dp(3)=2
dp(4)=dp(2)+dp(3)
……
dp(i)=dp(i-1)+dp(i-2)
#include <iostream>
using namespace std;
int main() {
int m,n,i,a[41]={0,0,1,2};
for(i=4; i<=40; i++)
a[i]=a[i-1]+a[i-2];
cin>>n;
while(n--) {
cin>>m;
cout<<a[m]<<endl;
}
return 0;
}