//传送门:http://poj.org/problem?id=3979
#include <queue>
#include <functional>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <stack>
#include <vector>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <assert.h>
using namespace std;
#define N 55
long long dp[N]; //注意可能超 int,并且进行打表
int main()
{
int t;
scanf("%d",&t);
while(t--){
int a,b;
scanf("%d%d",&a,&b);
if(a>b){ // a>b 输出0
printf("0\n");
continue;
}
memset(dp,-1,sizeof(dp));// 如果没查询过,则为-1
dp[0]=dp[1]=1; // 斐波那契数列 第0位 与 第1位 为1
if(dp[b-a]!=-1){ // dp[b-a] 值不为 -1,则表示已经查询过,直接输出结果
printf("%lld\n",dp[b-a]);
continue;
}else{
for(int i=2;i<=b-a;i++){
dp[i]=dp[i-1]+dp[i-2]; // 由于蜜蜂只能往右走,则可能从第 i-2 与 第 i-1位 到第 i 位
}
}
printf("%lld\n",dp[b-a]);
}
return 0;
}
HDU-2044-一只小蜜蜂...(简单DP)
最新推荐文章于 2021-03-10 15:38:44 发布