http://acm.hdu.edu.cn/showproblem.php?pid=2044
郁闷,WA几次,原来是int型小了,long long 才AC了,教训,谨记!
递推来做,f(n)=f(n-1)+f(n-2),f(0)=1,f(1)=1,这里 n=蜂窝编号大-蜂窝编号小.循环一下就出来了。
1 #include <iostream>
2 using namespace std;
3 long long f(int m)
4 {
5 long long a[55];
6 a[0]=1,a[1]=1;
7 if(m<=2)
8 {
9 return m;
10 }
11 for(int i=2;i<=m;i++)
12 {
13 a[i]=a[i-1]+a[i-2];
14 }
15 return a[m];
16
17 }
18 int main()
19 {
20 int n,a,b;
21 cin>>n;
22 while(n--)
23 {
24 cin>>a>>b;
25 cout<<f(b-a)<<endl;
26 }
27 return 0;
28 }
29
2 using namespace std;
3 long long f(int m)
4 {
5 long long a[55];
6 a[0]=1,a[1]=1;
7 if(m<=2)
8 {
9 return m;
10 }
11 for(int i=2;i<=m;i++)
12 {
13 a[i]=a[i-1]+a[i-2];
14 }
15 return a[m];
16
17 }
18 int main()
19 {
20 int n,a,b;
21 cin>>n;
22 while(n--)
23 {
24 cin>>a>>b;
25 cout<<f(b-a)<<endl;
26 }
27 return 0;
28 }
29