杭电oj——小蜜蜂有感

一只小蜜蜂...

Problem Description
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房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

Author

lcy

Source

递推求解专题练习(For Beginner) 

参考实例:

#include <iostream>  

using namespace std;  
int main()  
{  
    int n;  
    int f[51];//0<a<b<50,用f[i]记录第i步的走法总数  
  
    cin>>n;  
  
    while(n--)  //测试数据个数n不等于0且n--;
    {  
        int a,b;  
        cin>>a>>b;  
        int i;  
        for(i=1;i<=(b-a);++i)  
        {     
            if(i==1)   //之下五行定义当a,b相邻时的可能路线数,即b-a=1或b-a=2;
               f[i]=1; //当 b-a=1时的可能路线数;
            else  
                if(i==2)  
                    f[i]=2;  //当 b-a=2时的可能路线数;
                else  
                    f[i]=f[i-1]+f[i-2];//如图第i与第i-1和i-2相邻,所以i只可以接到i-1和i-2后面。即第i步是第i-1步的走法与第i-2步的和  
        }  
          
        cout<<f[b-a]<<endl; // 蜜蜂从蜂房a爬到蜂房b的可能路线数与起始位置,终止位置无关,只与两点之间的差值有关;
    }  
    return 0;  
}  


 

小蜜蜂有感:
 作为假期训练中的一道微不足道的小题目,今天我就拿来作为第一篇博客的“灵感”来源吧!
 自己认为这还是一道非常典型的通过递归解题的小题目,在开始我们或许会希望通过找规律的方法找出解题思路,那可就不好意思了!因为你肯定没有认真看完题目,因为在题目的最下方赫然的写着这么几个大字——“递推求解专题练习(For Beginner) ”,看到没!递归!!!
 作为递归的题目,或许我们的思路是固定的,即找出前一两个数,之后再找出以后各数之间的关系就行了,例如 f[i]=f[i-1]+f[i-2], f[i]=f[i-1]*f[i-2]等等,
在这道题中用到的就是 f[i]=f[i-1]+f[i-2],如果我没记错的话,这道题中用到的规律应该类似于大菲波数吧!
 对于f[1],f[2]的值应该非常简单,这个不用多说了,对于对于递归题目来说,最难的可能会有两点。
第一点:你不知道究竟哪道题应该用递归的思路来解,但是这道题中已明确给出提示,所以对于这道题来说,这一点不是关键所在;
第二点:自然是找规律了,下面我就简单的说一下对于这道题的找规律的方法。
 万变不离其宗,解题思路,解题规律自然要从题意中去挖掘啦!
小蜜蜂从一点到另一点,所有可能的路线数,或许我们我从下手,但是我们完全知道,对于递归的题目来说,最常见的应该就是找 f[i]与f[i-1]、f[i-2]的关系啦!如果你可以考虑到这一点,那这道题应该就非常简单了,因为这道题中f[i]自然就是题目所要求得 蜜蜂从蜂房a爬到蜂房b的可能路线数,同样,f[i-1]就是 蜜蜂从蜂房a爬到蜂房b-1的可能路线数,f[i-2]就是 蜜蜂从蜂房a爬到蜂房b-2的可能路线数;那 蜜蜂从蜂房a爬到蜂房b的可能路线数 与蜜蜂从蜂房a爬到蜂房b-1,b-2的可能路线数之间究竟有什么关心呢?
很显然,蜜蜂要到蜂房b,他只有两种可能,要么蜜蜂从蜂房b-1爬到蜂房b,要么从蜂房b-2爬到蜂房b;啊!终于理明白了吧!
总结一下就是: 蜜蜂从蜂房a爬到蜂房b的可能路线数其实就是它爬到蜂房b-1与b-2的所有路径之和了!干脆一点: f[i]=f[i-1]+f[i-2];
你说对不?不过,做出这道题与会做这道题可是有天壤之别,如果毫无提示就能做出来,那可是实在是太厉害了,看了提示也能做出来也是很不错的,不像某个人,看了程序了都不懂,看了N年后才反应过来!唉!
我想所有看过这篇文章的,说文雅一点就是看过这篇博客的应该都能看明白吧!那我就以这篇博客纪念我这大学第一年的暑假吧!希望一切不要白费哟!
PS:我很纳闷:你说为什么小蜜蜂不飞过去呢???
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值