文章目錄
一隻小蜜蜂【HDU2044】
看圖可知,由於蜜蜂每次只能從前1個蜂房前2個蜂房過來,從第n歌蜂房考慮:那麼f(n)=f(n-2)+f(n-1)。
注意數列的開始幾項會有所不同。
f(1)=0,因爲蜜蜂開始在第1個蜂房;
f(2)=1,蜜蜂只能從第1個蜂房來到第2個蜂房;
f(3)=2,蜜蜂可以從第1個蜂房過來,也可以從第2個蜂房過來;
即:f(n)=f(n-2)+f(n-1),n>3。
還有,蜜蜂從a蜂房到b蜂房的各種可能路徑,相當於從第1蜂房到第b-a+1蜂房。
#include <iostream>
#include <string.h>
#include <queue>
#include <cmath>
typedef unsigned long long ULL;
using namespace std;
ULL fn[55];
void ans(){
fn[0]=0;fn[1]=0;fn[2]=1;
fn[3]=2;
for(int i=4;i<55;i++){
fn[i]=fn[i-1]+fn[i-2];
}
}
int main(){
int m,a,b;
cin>>m;
ans();
while(m--){
cin>>a>>b;
cout<<fn[b-a+1]<<endl;
}
}