您的位置:首页 > 其它

动态规划6之1011

2016-05-19 08:14 218 查看
1 题目编号:1011

2 题目内容:

Problem Description

有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。<br>其中,蜂房的结构如下所示。<br><img src=../data/images/C40-1001-1.jpg><br>

 

Input

输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。<br>

 

Output

对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。<br>

 

Sample Input

2
1 2
3 6

 

Sample Output

1
3

 
3 题意:有一蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
4 解题思路形成过程:想知道从a到b可能的路线数就需要知道到达b-1的路线数和b-2的路线数,即斐波拉契数列递推式为f(b)=f(b-1)+f(b-2)此题需要特别注意的是因为n可以达到55,所以斐波拉契数列的递推式求出的结果可能会溢出,因此需要用到long long型或__int64型的数据类型。 当然此题也可以用DP,只需要知道后面状态的值,就可以推出前面状态的值,用自底向上的方法逐步填充DP表即可。 
5 代码:

#include<stdio.h>
int main()
{
__int64 f[60];
int a,b,i,T;
scanf("%d",&T);
f[0]=0;
while(T--)
{
scanf("%d%d",&a,&b);
f[1]=1;
f[2]=2;
f[3]=3;
for(i=4;i<=b-a;++i)
{
f[i]=f[i-2]+f[i-1];
}
printf("%I64d\n",f[b-a]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划