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题解:因为蜂房的特殊结构,1到n的步数和k+1到n+k的步数是相等的所以用dp[n-1]来储存步数。dp[i] = dp[i-1] + dp[i-2];(i大于2);
#include<cstdio> #include<cstring> #include<iostream> #include<stdlib.h> #include<vector> #include<queue> #include<cmath> using namespace std; #define maxn 100 #define oo 0x3f3f3f #define PI 3.1415926535897932 int n; int k; long long dp[maxn]; void init() { for(int i=3; i<=maxn; i++) dp[i] = dp[i-1] + dp[i-2]; } int main() { int t; scanf("%d", &t); dp[1] = 1; dp[2] = 2; while(t--) { init(); int m,n; scanf("%d%d",&m,&n); k = n - m; printf("%I64d\n",dp[k]); } return 0; }
时间: 2024-10-09 22:06:08