一只小蜜蜂...
其中,蜂房的结构如下所示。
分析:
1->3的路径:
1->2->3 ; 1->3;
1->4的路径:
1->2->4; 1->2->3->4; 1->3->4;
1->2 F(1->2) 1条
1->3 F(1->3)+F(1->2->3) 2条
1->4 F(3->4) +F(2->4)
=>F(1->3)+F(1->2)
=>2+1
1->5 F(4->5)+F(3->5)
=>F(1->4)+F(1->3)
=>3+2
所以n->m的路径,递归的思想的话:
f(n, m-1)+f(n, m-2) ,n!=m
2 ,n+2=m
1 , n+1=m
OJ运算会报错(Judge Status : Time Limit Exceeded) ,递归会超时
既然题目已经给出数的范围,干脆根据范围把结果算完,放到数组,毕竟这比递归省时。
#include<iostream>
using namespace std;
int MAX=51;
__int64 f[51];
{
f[1]=1,f[2]=2;
int num,a,b;
for(int i=3;i<MAX;i++)
{
f[i]=f[i-1]+f[i-2];
}
while(cin>>num)
{
for(int i=0;i<num;i++)
{
cin>>a>>b;
if(a<b)
cout<<f[b-a]<<endl;
}
}
return 0;
}