hdu2044
#include <iostream>
using namespace std;
int how(int a,int b)
{ int sim,dou,sum=1;
sim=a+1;
dou=a+2;
if(sim==b || dou==b)
{ return sum; }
else {
sum+=how(sim,b)+how(dou,b);
}
return sum; }
int main()
{ int n;
while(scanf("%d",&n)!=EOF)
{ while(n)
{ int a,b;
cin>>a; cin>>b;
cout<<how(a,b)<<endl;
n--; } }
return 0; }
这个代码超时了。
最近才在弄做题还比较菜呀。
什么是acm,就是用最简单的方式解决问题,虽然这个题可以用递归但是还有更简单的方式:
看到蜂巢上的数字其实可以明白了。相差为1或2的两个蜂巢都只有一条路能通到。而相差3的呢?其实就是走到b点相邻点的方式有几种,与b直接相邻的这有两个点。那到b定其实就是到b-1点和到b-2点的路数之和,这就回到了大家很熟悉的斐波那契数列了,体也就解决了。
#include<stdio.h>
int main()
{
int n;
__int64 f[55];
f[1]=1;
f[2]=1;
for(int i=3;i<55;i++)
{
f[i]=f[i-1]+f[i-2];
}
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
printf("%I64d\n",f[b-a+1]);
}
return 0;
}