nyoj 76 超級臺階

時間限制: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;
}        
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章