程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> NYOJ 76---超級台階

NYOJ 76---超級台階

編輯:C++入門知識


題目:                                                                 超級台階          
描述
有一樓梯共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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved