一只小蜜蜂...
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 29985 Accepted Submission(s): 11066
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
Author
lcy
Source
早起一水。。。
设从a走到b有f(b,a)种,有简单的递推关系f(b,a)=f(b-1,a)+f(b-2,a),
初始条件为f(a+1,a)=1,f(a+2,a)=2
注意这个其实是斐波纳契,所以要用long long还有记忆化
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 5 using namespace std; 6 7 long long dp[100][100]; 8 9 long long f(int b,int a) 10 { 11 if(dp[b][a]) 12 return dp[b][a]; 13 if(b==a+1) 14 return dp[b][a]=1; 15 if(b==a+2) 16 return dp[b][a]=2; 17 return dp[b][a]=f(b-1,a)+f(b-2,a); 18 } 19 20 int main() 21 { 22 int kase,a,b; 23 24 scanf("%d",&kase); 25 26 while(kase--) 27 { 28 for(int i=0;i<100;i++) 29 fill(dp[i],dp[i]+100,0); 30 scanf("%d %d",&a,&b); 31 cout<<f(b,a)<<endl; 32 } 33 34 return 0; 35 }