一只小蜜蜂 HDU2044 递推

Description
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
一只小蜜蜂 HDU2044 递推_第1张图片

Input

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

Output

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

Sample Input

2
1 2
3 6

Sample Output

1
3
 
      
思路:想知道从a到b可能的路线数就需要知道到达b-1的路线数和b-2的路线数,即f(b)=f(b-1)+f(b-2),即斐波拉契数列递推式(还需要注意的斐波拉契数列的递推式求出的结果可能会溢出)

一,由递归实现递推式,但会运行超时
#include 
#include 
int f(int a,int b)
{
    if(b==2)
        return 1;
    else if(b==3)
        return 2;
    else
        return f(1,b-1)+f(1,b-2);
}
int main()
{
    int n;
    int start,direction;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&start,&direction);
        printf("%d\n",f(1,direction-start+1));
    }
    return 0;
}
二,打表实现递推式
#include 
#include 
int main()
{
    int n;
    scanf("%d",&n);
    int start,direction;
    double way[51]={0};
    way[2]=1;
    way[3]=2;
    for(int i=4;i<=50;i++)
        way[i]=way[i-1]+way[i-2];
    for(int i=1;i<=n;i++){
        scanf("%d%d",&start,&direction);
        printf("%.0f\n",way[direction-start+1]);
    }
    return 0;
}


你可能感兴趣的:(ACM训练18周,HDU_OJ,递推)