杭电OJ

xiaoxiao2021-02-27  322

Problem Description 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2044

这个题目看了多遍自己动手画还是一脸蒙,后来看了一下指导,才知道怎么回事,首先分析一下这个图形顺序以蛇的形,分为两行,题目中右侧相邻的蜂房,不能反向爬

的意思是可以1->2,1->3,2->3,但是不能3->2,3->1这种方式,由图可以看出,1->2,3->4,5->6等是一回事1->4,3->6等是一回事。

自己可以推几个出来1->2 1部

1->3 2步

1->4 3步

1->5 5步

1->6 8步 等等这个时候已经能看出了,这是一个简单的递推关系

**还有一个点需要注意到啊ab的范围是0-50很大的区间的,int位数不够,需要用到long long int

代码

#include<stdio.h> int main() { __int64 ad[60]; //把每一个距离的用递存放在数组中 int i,j,k,a,b,n; scanf("%d",&n); ad[1]=1; ad[2]=2; for(i=3;i<=50;i++){ ad[i]=ad[i-2]+ad[i-1]; } while(n--){ scanf("%d %d",&a,&b); //根据ab输入的距离找对应数组里的值输出即可 printf("%I64d\n",ad[b-a]); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-14649.html

最新回复(0)