HDU - 超级楼梯

http://acm.hdu.edu.cn/showproblem.php?pid=2041

 题意:有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?

 题解:手推前5项,发现是1,2,3,5,8 , 那么可以猜测是斐波那契数列的衍生,也就是 num[ i ] = num[ i-1 ] + num[ i - 2 ] 。 

#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <assert.h>
#include <set>
#include <cmath>
#include <queue>
#include <cstdlib>
#include <iostream>
#include <bitset>
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
using namespace std;
typedef long long ll;
const int mxn = 1e2+5;
ll n,m,k,t,dp[mxn],a[mxn];
int main()
{
    for(int i=1;i<55;i++)
        dp[i] = i<=3 ? i : dp[i-1]+dp[i-2] ;
    cin>>t;
    while(t--)
    {
        cin>>n;
        cout<<dp[n-1]<<endl;
    }
    return 0 ;
}

 

posted @ 2020-02-01 15:17  __MEET  阅读(147)  评论(0编辑  收藏  举报