1. 程式人生 > >南陽理工 76《超級臺階》 動態規劃

南陽理工 76《超級臺階》 動態規劃

超級臺階

時間限制:1000 ms  |  記憶體限制:65535 KB難度:3
描述

有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少走法?

注:規定從一級到一級有0種走法。

輸入
輸入資料首先包含一個整數n(1<=n<=100),表示測試例項的個數,然後是n行資料,每行包含一個整數m,(1<=m<=40), 表示樓梯的級數。
輸出
對於每個測試例項,請輸出不同走法的數量。
樣例輸入
2
2
3
樣例輸出
1
2
來源

題解:

    這種屬於動態規劃的經典題型,只要找到狀態轉移方程就可以了,設定dp[i]是走到i可以走的方法總數,那麼退一步來說他是等於i-2,i-1的和(意思就是,退一步和退兩步那兩個位置的方法總和)。

    因此狀態轉移方程為:    dp[i]=dp[i-1]+dp[i-2];

原創程式碼:

#include<stdio.h>
int dp[40];
int main()
{
	int n,t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		dp[1]=0;
		dp[2]=1;
		dp[3]=2;
		for(int i=4;i<=40;i++)
			dp[i]=dp[i-1]+dp[i-2];
		printf("%d\n",dp[n]);
	}
	return 0;
}