牛客網 N階樓梯問題 (動態規劃)

題目描述

N階樓梯上樓問題:一次可以走兩階或一階,問有多少種上樓方式。(要求採用非遞歸)

輸入描述:

輸入包括一個整數N,(1<=N<90)。

輸出描述:

可能有多組測試數據,對於每組數據,
輸出當樓梯階數是N時的上樓方式個數。
示例1

輸入

4

輸出

5

Solution

當 n 大於 2 時,每種上臺階方式的最後一步,由於只有兩種行走的方法,因此它只可能是從 n-1 階經過一步走到 n 階,或者從 n-2 階經過二步走到 n 階。
狀態轉移方程dp[i]=dp[i1]+dp[i2]dp[i]=dp[i-1]+dp[i-2]

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 100;
int dp[maxn];
int main()
{
    int N;
    memset(dp, 0, sizeof(dp));
    dp[1] = 1, dp[2] = 2;
    for (int i = 3; i <= maxn; i++)
        dp[i] = dp[i - 1] + dp[i - 2];
    while (~scanf("%d", &N))
        printf("%d\n", dp[N]);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章