Problem K ID:1011
简单题意:蜜蜂只能爬向右侧相邻的蜂房,计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
解题思路形成过程:t=b-a为相隔的蜂房数。
用一个数组a来储存不同t值对应的可能路线数,a[1]=1,a[2]=2;
当n>=3时,状态转移方程为:a[i]=a[i-1]+a[i-2]。
因为0<a<b<50,进行预处理,将t=1至t=50的结果储存到数组中。
对应不同的t值,直接输出对应的数组值(a[i])。
感想:看似情况变复杂了,实际上只比曾经遇到的问题(如上楼梯问题)多一步运算而已。
当觉得情况有些陌生时,可以想一想是否和曾经遇到的问题相类似,能不能转换成其他的问题。
注意数据类型。
代码:#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
__int64 s[51];
void dp()
{
s[1]=1;s[2]=2;
for(int i=3;i<=50;++i)
s[i]=s[i-2]+s[i-1];
}
int main()
{
//freopen("1.txt","r",stdin);
int n;
scanf("%d",&n);
dp();
while(n--)
{
int a,b,t;
scanf("%d%d",&a,&b);
t=b-a;
printf("%I64d\n",s[t]);
}
return 0;
}
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
__int64 s[51];
void dp()
{
s[1]=1;s[2]=2;
for(int i=3;i<=50;++i)
s[i]=s[i-2]+s[i-1];
}
int main()
{
//freopen("1.txt","r",stdin);
int n;
scanf("%d",&n);
dp();
while(n--)
{
int a,b,t;
scanf("%d%d",&a,&b);
t=b-a;
printf("%I64d\n",s[t]);
}
return 0;
}