hdu step 3 1 1 超級樓梯 簡單遞推 從第1級到第m級有多少種走法 每次只能走一步或兩步
阿新 • • 發佈:2018-12-21
在寫題解之前給自己打一下廣告哈~。。抱歉了,希望大家多多支援我在CSDN的視訊課程,地址如下:
http://edu.csdn.net/course/detail/209
題目:
超級樓梯 |
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) |
Total Submission(s): 652 Accepted Submission(s): 483 |
Problem Description有一樓梯共M級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第M級,共有多少種走法? |
Input輸入資料首先包含一個整數N,表示測試例項的個數,然後是N行資料,每行包含一個整數M(1<=M<=40),表示樓梯的級數。 |
Output對於每個測試例項,請輸出不同走法的數量 |
Sample Input223 |
Sample Output12 |
Authorlcy |
Source2005實驗班短學期考試 |
Recommendlcy |
題目分析:
簡單遞推。
程式碼如下:
/* * a.cpp * * Created on: 2015年2月5日 * Author: Administrator */#include <iostream>#include <cstdio>using namespace std;const int maxn = 41;int dp[maxn];void prepare (){ /** * 關於dp[1]、dp[2]的理解 * 題目中說的是你現在已經是站在第一級上了.我們在寫程式的時候 * 後退一步,假設人在第0級。那麼這時候我們就很容理解 * 為什麼dp[1]==1 * dp[2] == 2了 *單數這時候需要注意的是題目中說的上到底3級,其實也就是上到我們程式中所說的第2級。這是需要注意的. *這也是為什麼輸出最後的結果是dp[n-1]了 */ dp[1] = 1; dp[2] = 2; int i; for(i = 3 ; i < maxn ; ++i){ /** * 逆向思考。要想走到M級,可以分為2種情況。 * 1)從m-2級邁兩步 * 2)從m-1級邁一步 */ dp[i] = dp[i-1] + dp[i-2]; }}int main(){ prepare(); int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); printf("%d\n",dp[n-1]); } return 0;}