有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房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 ",con[b]); } return 0; }