1. 程式人生 > >[遞推簡單dp]-hdu 2041 超級樓梯

[遞推簡單dp]-hdu 2041 超級樓梯

[遞推簡單dp]-hdu 2041 超級樓梯

標籤: ACM


題意:

有一樓梯共M級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第M級,共有多少種走法?

input

輸入資料首先包含一個整數N,表示測試例項的個數,然後是N行資料,每行包含一個整數M(1<=M<=40),表示樓梯的級數。

output

對於每個測試例項,請輸出不同走法的數量

sample input

2
2
3

sample output

1
2

解題思路:

**狀態轉移方程為:dp[i]=dp[i-2]+dp[i-1]
到達第2層有一種方法,到達第三層有兩種方法
到達第i層(i>3)可以是從第i-2層上來,也可以是i-1層上來
可以先打表計算所有層數的可能,然後詢問時直接輸出避免遞迴**

AC程式碼:

#include <iostream>
#include <string.h>
using namespace std;
int dp[100];
int main()
{
    int t,n;cin>>t;
    dp[2]=1;
    dp[3]=2;
    for(int i=3;i<50;i++)
        dp[i]=dp[i-2]+dp[i-1];
    while(t--)
    {
        cin>>n;
        cout<<dp[n]<<endl;
    }
    return
0; }