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;
    }
}
发布了54 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43629813/article/details/102987302
今日推荐