P1244 青蛙过河

题目描述

有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(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号的青蛙上面。

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

输入输出格式

输入格式:

两个整数h,k

输出格式:

一个整数,表示最多能有多少只青蛙可以根据以上规则顺利过河。

输入输出样例

输入样例#1:

2 3

输出样例#1:

16

分析:

情况一:

当k确定而h=0时,没有中间柱子,蛤蛤们只能通过荷叶来移动.每片荷叶只能有1位青蛙.所以要求最大的通过数目就必须把所有的荷叶用上.

由于他们必须按顺序从小到大从上到下垒起来(跳到石墩B上面的时候).所以这种情况下,最大通过数目为k+1.

就是石墩B上面跳一只,其余每片荷叶上面跳一只。

因为题目要求中青蛙可以直接到B。

(2)青蛙可以:A→B(表示可以从A跳到B,下同),A→C,A→D,C→B,D→B,D→C,C→D;

情况二:

当k确定而h=1时,有一个中间柱子s1。

先将1->k+1号(1k+1个)放在s1石墩上,然后将k+2->2k+2号(1k+1个)放到全部荷叶和石墩B上。

情况三:

当k确定而h=2时,有两个中间柱子s1,s2。

先将1->2k+2号(2k+2个)放在s1石墩上,然后将2k+3->3k+3号(1k+1个)放在s2石墩上,

然后再将3k+4->4k+4(1k+1个)放到全部荷叶和石墩B上。

既然如此我们用 f[h][k] 表示 h 个石墩 k 片荷叶时最多的青蛙数

显然 f[0][k]=k+1

h=1时,让尽可能多的青蛙跳到D区石墩上(f[0][k]),再让尽可能多的青蛙跳到B石墩上(f[0][k]),最后让D区石墩上的青蛙跳到B上,所以 f[1][k]= f[0][k] + f[0][k]。

h=2时,让尽可能多的青蛙跳到D区的第一个石墩上(f[1][k]),再让尽可能多的青蛙跳到D区的第二个石墩上(f[0][k]),再让尽可能多的青蛙跳到B石墩上(f[0][k]),再让D区第二个石墩上的青蛙跳到B石墩上,最后让D区第一个石墩上的青蛙跳到B上,所以 f[2][k]=f[1][k]+ f[0][k] + f[0][k]。

以此类推。f[h][k]=f[h-1][k]+f[h-2][k]+…+f[1][k]+f[0][k]+f[0][k]

由于青蛙跳到D区石墩上和从D区跳到B上环境是一样的(即空石墩的数量是一样的),所以不用担心青蛙跳不到B上啦。

得到递推公式之后,让我们再来看一看。

f[1][k]= f[0][k] + f[0][k]=2*(k+1)

f[2][k]=f[1][k]+ f[0][k] + f[0][k] =f[1][k]+f[1][k]=2*2*(k+1)

f[3][k]=f[2][k]+ f[1][k]+ f[0][k] + f[0][k]=f[2][k]+f[2][k]=2*2*2*(k+1)

… f[h][k]=2*f[h-1][k]=(2^h)*(k+1)

于是我们得到了通项公式f[h][k] =(2^h)*(k+1)

1 #include<iostream>
2 #include<math.h>
3 using namespace std;
4 int main()
5 {
6     int i,j,m,h,k,a;
7     while(cin>>h>>k)
8     cout<<(k+1)*pow(2,h)<<endl;
9 }

View Code

转载于:https://www.cnblogs.com/Renyi-Fan/p/7482533.html

P1244 青蛙过河相关推荐

  1. 洛谷P1244青蛙过河

    洛谷P1244青蛙过河 题目描述 有一条河,左边一个石墩(A 区)上有编号为 1,2,-,n 的 n 只青蛙,河中有 k 个荷叶(C 区),还有 h 个石墩(D 区),右边有一个石墩(B 区),n 只 ...

  2. 洛谷P1244 青蛙过河 DP/思路

    又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...

  3. 洛谷P1244青蛙过河题解

    我用的是C++来解 其实这道题很简单,只要弄清楚关系就行,和汉诺塔问题相似.不用细想顺序(青蛙就是乱跳),可将青蛙作为一个整体来想. 我们用f[h][k]表示h个石墩和k片荷叶最多的青蛙数 f[0][ ...

  4. java青蛙过河打字_趣味算法——青蛙过河(JAVA)

    青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...

  5. java 独木桥_趣味算法——青蛙过河(JAVA)

    青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...

  6. P1244 [NOI2000] 青蛙过河(普及-)

    传送门:[NOI2000] 青蛙过河 - 洛谷 思路:由题意容易得知当只有m片荷叶时,有m+1只青蛙可以过河,增加一个石墩,此时状态为 f[1][m],此时可以过河的青蛙数为2m+2只,石墩上面可以站 ...

  7. 两个各四只青蛙过河java_趣味算法——青蛙过河(JAVA)

    /*** 青蛙过河 *@authorrubekid **/ public classRiverFrog {public static final int LEFT_FROG = -1;public s ...

  8. nyoj-619 青蛙过河

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=619 题目大意:就是有一条宽为L的河,河上有n个石头,每个石头与河对岸的距离为a[i],然 ...

  9. 青蛙过河 猴子爬山 兔子繁殖 开宝箱2 找气球 指针函数 铺地砖

    Problem A: 青蛙过河 Description 一条小溪尺寸不大,青蛙可以从左岸跳到右岸,在左岸有一石柱L,面积只容得下一只青蛙落脚,同样右岸也有一石柱R,面积也只容得下一只青蛙落脚.有一队青 ...

最新文章

  1. VirtualBox安装Ubuntu详细过程
  2. Camel In Action 读书笔记 (1)
  3. Android --- Android Studio 内无法直接运行 main 方法
  4. iScroll 5 API 中文版
  5. BZOJ3609 [Heoi2014]人人尽说江南好 【博弈】
  6. 场景化封装,一站式使用,普惠AI集成 ——阿里云发布智能媒体管理产品
  7. mac电脑bash_profile创建,打开,编辑,保存
  8. 计算机音乐的制作流程,Premiere制作音乐电子相册的方法和流程 计算机类数媒...
  9. TM(qq) 默认表情丢失
  10. php会议预约,会议预约系统-信息发布系统|多媒体信息发布系统|视展信息发布系统首页...
  11. python面板数据模型_面板数据模型选择
  12. office新建文件打开提示文件格式或扩展名无效
  13. linux 文件系统架构
  14. APP首次启动提示开启定位服务
  15. 大姐夫再冲世界首富,亚马逊HQ2的赢家已经初现。。。
  16. ICLR 2022最佳论文解读
  17. win7系统下联想thinkpad x220笔记本电脑关闭触摸板
  18. 如何把thrift rpc转换为http
  19. 【PyTorch】PyTorch搭建神经网络处理图片分类的完整代码
  20. NB-IoT使用CoAP协议接入华为IoT平台(NB-IoT项目实战专栏—8)

热门文章

  1. 计算机用并行传输还是串行,网线RJ45是并行传输还是串行
  2. 中文命名代码示例之Spring Boot 1.3.3演示
  3. [译]C语言实现一个简易的Hash table(3)
  4. 团队任务3:每日立会(2018-10-25)
  5. 使用ubuntu过程中遇到的问题汇总
  6. 502 Bad Gateway nginx 解决
  7. 如何调试栈破坏之类的问题
  8. 用驴子拖宝马——怎样滥用结构体
  9. virtualbox安装ubuntu时需要全屏显示的解决办法
  10. Windows句柄-2