HDU 2044 一只小蜜蜂

一只小蜜蜂...

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 }
[C++]
原文地址:https://www.cnblogs.com/lzj-0218/p/3247277.html