1. 程式人生 > >HDU2041 超級樓梯【基礎DP】

HDU2041 超級樓梯【基礎DP】

超級樓梯

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 78145    Accepted Submission(s): 40069


 

Problem Description

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

Input

輸入資料首先包含一個整數N,表示測試例項的個數,然後是N行資料,每行包含一個整數M(1<=M<=40),表示樓梯的級數。

Output

對於每個測試例項,請輸出不同走法的數量

Sample Input

2
2
3

Sample Output

1
2

Author

lcy 

Source

2005實驗班短學期考試

問題連結:HDU2041 超級樓梯

解題思路:f[i]表示到達臺階i的方案數,由於只能從i-1或者i-2到達臺階 i 因此f[i]=f[i-1]+f[i-2] 。

AC的C++程式碼:

#include<iostream>

using namespace std;

const int N=55;
long long f[N];

void solve(int n)
{
	f[1]=1;
	f[2]=1;//從臺階1到臺階2只有一種方法 
	for(int i=3;i<n;i++)
	  f[i]=f[i-1]+f[i-2];//只能從i-1或者i-2到達臺階i
}

int main()
{
	int n,m;
	solve(N);
	scanf("%d",&n);
	while(n--){
		scanf("%d",&m);
		printf("%lld\n",f[m]);
	}
	return 0;
 }