题目链接:HDU 2041 超级楼梯

HDU 2041 超级楼梯
没思路。。。

【分析】

  • 首先题目限制只能走一级或者两级, 所以逆向思考, 要到达第 n 级楼梯, 只有两种方式,从(n-1)级 或 (n-2)级到达的。

  • 所以可以用递推的思想去想这题,假设有一个数组 s[n],那么
    s[1] = 1(由于一开始就在第一级,只有一种方法)
    s[2] = 1(只能从s[1]上去 没有其他方法)。
    s[3] = s[1] + s[2](只能从第一级跨两步, 或者第二级跨一步)
    s[4] = s[3] + s[2]
    ……

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>

using namespace std;
const int maxn = 45;
int a[maxn];

void init()
{
	a[1] = 1;
	a[2] = 1;
	for(int i=3;i<=40;i++)
		a[i] = a[i-1]+a[i-2];
}

int main()
{
	init();
	
	int t;
	scanf("%d",&t);
	int m;
	while(t--)
	{
		scanf("%d",&m);
		cout<<a[m]<<endl;
	} 
	return 0;
}

相关文章: