HDU 2044 Coins

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

Input输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。 
Output对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。 
Sample Input

2
1 2
3 6

Sample Output

1
3

一个简单的动态规划的题目,从最后的状态开始考虑,蜜蜂进入最后房间的路线只有与它相邻两条,同样,该想法可推至进入第n个房间的路线。
那么当从第n个房间进入第m个房间时,如何剔除多余的路线?可以将第n个房间当作第1个房间,进入第n个房间的路线数为1,进入第n-1个房间的路线为零。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<stack>
#include<deque>
#include<iostream>
using namespace std;
int main()
{
    int i,p,j;
    int a,b,t,n;
    long long con[51];
    con[1]=1;
    con[2]=1;

    scanf("%d",&t);
    for(i=1;i<=t;i++)
    {
        scanf("%d%d",&a,&b);
        con[a]=1;
        con[a-1]=0;
        for(j=a+1;j<=b;j++)
            con[j]=con[j-1]+con[j-2];
        printf("%lld\n",con[b]);
    }
    return 0;
}
View Code

 

posted @ 2018-07-19 17:42  Daybreaking  阅读(115)  评论(0编辑  收藏  举报