題目描述
N階樓梯上樓問題:一次可以走兩階或一階,問有多少種上樓方式。(要求採用非遞歸)
輸入描述:
輸入包括一個整數N,(1<=N<90)。
輸出描述:
可能有多組測試數據,對於每組數據,
輸出當樓梯階數是N時的上樓方式個數。
示例1
輸入
4
輸出
5
Solution
當 n 大於 2 時,每種上臺階方式的最後一步,由於只有兩種行走的方法,因此它只可能是從 n-1 階經過一步走到 n 階,或者從 n-2 階經過二步走到 n 階。
狀態轉移方程
#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;
}