找东西的WXS

本文介绍了一个关于WXS找东西的谜题,其中他只会向右寻找。问题涉及在一个类似蜂房结构中,利用深度搜索算法找出从起点a到目标b的所有路径。由于数据规模大,直接深度搜索会导致超时,因此通过分析转化为数列问题,找到解决问题的规律。
摘要由CSDN通过智能技术生成

找东西的WXS

题目描述

从前,有个叫wxs的人,他每次找东西的时候,只会到自己的右边去找东西,绝对不会返回去找,有一天,他的朋友把他的宝贝放在了一个和蜂房结构一样的地区中的某个房子里面,这个时候wxs就懵逼了,需要我们的帮助,假设wxs的位置是a,他的宝贝是b,那么让我们来编写一个程序,计算一下a走到b的所有路线吧。
其中,结构如下所示。

分析:

对于每一个数字,都只有两个方向可走。我们可以利用深度搜索来。将每条路都尝试一遍

#include"stdio.h"

int count=0,start,end;
dfs(int n)
{
    if(n==end)//到了终点,count+1
    {
        count++;
        return 0;
    }
    if(n>end)//有可能会超过终点,所以,需特判
        return 0;
    else
    {
        dfs(n+2);//此两个递归,分别表示两条路
        dfs(n+1);
    }
}
int main()
{
    int x;
    scanf("%d",&x);

        while(x--)
        {
            scanf("%d%d",&start,&end);

                count=0;
                dfs(start);
                printf("%d\n",count);

        }

}

此方法可以,但因为数据过大,时间必然超限。因此,通过分析,我们会发现这就是一个数列。1 2 3 5 8 13……如果起点不是1,则通过变形将起点改成1;
代码如下:

#include"stdio.h"
int main()
{
    long long s[51],a,b,i,j,n;
    s[1]=1;s[2]=2;
    for(i=3;i<51;i++)
        s[i]=s[i-1]+s[i-2];
    while(~scanf("%lld",&n))
       {
           while(n--)
           {
               scanf("%lld%lld",&a,&b);
               b=b-(a)+1;
               a=1;
               printf("%lld\n",s[b-1]);
           }
       }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值