一只小蜜蜂... hdu2044

题源一只小蜜蜂… hdu2044
题目:
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
在这里插入图片描述
Input
输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。
Output
对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。
Sample Input
2
1 2
3 6
Sample Output
1
3

思路:
找规律,有思路:
规律无论是从第几个房间到第几个房间,相邻房间之间的走法都是1;题中要求只能往右走,则只能往比此刻房间号大的房间走;从1到2为1, 2到3的走法为从1到3的走法加上2到3的走法,类推从3到8:
先求3到4,再求3到5(3直接到5加上3到4的走法) 再求3到6(3到4的走法加上3到5的走法) 再求3到7(3到5的走法加上3到6的走法 ) 最后求3到8(3到6的走法加上3到7的走法);
AC代码:

#include<bits/stdc++.h>
#include<cmath>
typedef long long ll;
using namespace std;
//int a[100][100];
int a,b;
ll aa[1000];
int main()
{
    int c;
    scanf("%d",&c);
    while(c--)
    {
        cin >>a>>b;
        int ans=1;
        aa[0]=0;
        aa[1]=1;
        for(int i=a+1;i<=b;i++)
        {
            aa[++ans]=aa[ans-1]+aa[ans-2];//类推累加
        }
        cout <<aa[ans]<<endl;
    }
    return 0;

}

今天晚上突然想到这道题,上次写这道题时,其实当时我是用的递归暴力求解,后来发现超时,就放弃了,今晚忽然想起来用记忆化搜索可以大大节省时间,为何不修改一下。试了一下,真的ac了

放代码:、

#include<bits/stdc++.h>
#include<cmath>
typedef long long ll;
using namespace std;
//int a[100][100];
int a,b;
ll dp[1000];//步数可能会爆int
ll d(int x)//此处有坑,虽然dp数组用long loong表示了,但是这个递归函数的返回值也要设置成long long
{
    if(x>b) return 0;
    if(dp[x]>0) return dp[x];
    if(x==b) return 1;
    return dp[x]=d(x+1)+d(x+2);
}
int main()
{
    int c;
    cin >>c;
    while(c--)
    {
        memset(dp,0,sizeof dp);
        cin >>a>>b;
        cout<<d(a)<<endl;
    }
    return 0;

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值