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; }