【分类练习2.递归与递推】青蛙过河

【分类练习2.递归与递推】青蛙过河
时间限制 : 10000 MS   空间限制 : 65536 KB
问题描述

有一条河,左边一个石墩(A区)上有编号为1.2.3.4……n的n只青蛙,河中有个荷叶(C区),还有个石墩(D区),右边有一个石墩(B区),如下图所示。

n只青蛙要过河(从左岸石墩A到右岸石墩B),规则为:

  1. 石墩上可以承受任意多只青蛙,荷叶只能承受一只青蛙(不论大小);
  2. 青蛙可以:A→B(表示可以从A跳到B,下同),A→C,A→D,C→B,D→B,D→C,C→D;
  3. 当一个石墩上有多只青蛙时,则上面的青蛙只能跳到比它大1号的青蛙上面。

你的任务是对于给出的,计算并输出最多能有多少只青蛙可以根据以上规则顺利过河?

输入格式

两个整数和

输出格式

一个整数,表示最多青蛙数量

样例输入

2 3

样例输出

16

提示

数据范围:


提交

/*思路:
a[n]为有n个石头的青蛙数。
1  如果有s=0个石头,m个荷叶,很显然,可以移动m+1个青蛙。
2  如果有s=1个石头,m个荷叶,那么m个荷叶上的青蛙可以移动到石头上,而石头上也可以放最大的那个青蛙,然后再进行s=0时的操作,共有2*(m+1)个。
3  如果有s=2个石头,m个荷叶,那么第2个石头上,也可以先放最大的青蛙,然后把荷叶上的青蛙放到第二个人石头上,然后第一个石头也是这样,这时,每个石头上都有m+1个青蛙,但是石头上的青蛙是可以重新放回荷叶的,于是,可以把第二个石头上的青蛙放回荷叶,这样就可以把青蛙都移动到第一个石头上,而第二个石头上就可以再放m+1个青蛙,然而根据步骤一,荷叶和b岸也可以放m+1个青蛙,于是一共有2*2(m+1)个,
4 观察会发现,第n个石头上的青蛙数是有n-1个石头上的青蛙数之和,即a[n-1], 于是a[n]=2*a[n-1]。从s=0到s=n有n个2,,所有a[n]=2ˆn*(m+1)。
感想:
题目想起来麻烦但代码非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常简单。
(崩溃了老师跑分的时候我文件夹里的代码竟然是我以前的,我也不知道为什么我编译后他不会自动保存啊*/

#include <iostream>
 
using namespace std;
 
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        int t=1;
        for(int i=0; i<n; i++)
        {
            t=t*2;
        }
        cout<<(m+1)*t<<endl;
    }
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值