ACM---遞歸與遞推

一隻小蜜蜂【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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章