B - 一只小蜜蜂...
Description
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
其中,蜂房的结构如下所示。
![](https://images2015.cnblogs.com/blog/993438/201608/993438-20160806171915450-182022361.png)
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; }