一只小蜜蜂…
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 156 Accepted Submission(s) : 59
Problem Description
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。Input
输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0 < a< b <50)。
Output
对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。
Sample Input
2
1 2
3 6Sample Output
1
3
这是一道看似简单的题,访问最后一个蜂房的方式有两种,通过其左面的蜂房或者下面的蜂房,路径数就是它们的和。不难看出此题的递归方程为:F[n] = F[n-1]+F[n-2]。但需要注意的一点是,当b-a很大的时候,普通的int数组储存空间不足以储存路径数,所以可以用 long long 类型去定义数组,代码已AC。
AC代码:
#include<iostream>
using namespace std;
int main()
{
int t, a, b;
long long f[55];
cin>>t;
f[1] = 1;
f[2] = 2;
for(int i=3; i<=55; i++)
{
f[i] = f[i-1] + f[i-2];
}
while(t--)
{
cin>>a>>b;
cout<<f[b-a]<<endl;
}
return 0;
}
来自:最帅的算法工程师