P1244 青蛙过河
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
输出格式:
一个整数,表示最多能有多少只青蛙可以根据以上规则顺利过河。
输入输出样例
2 3
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 青蛙过河相关推荐
- 洛谷P1244青蛙过河
洛谷P1244青蛙过河 题目描述 有一条河,左边一个石墩(A 区)上有编号为 1,2,-,n 的 n 只青蛙,河中有 k 个荷叶(C 区),还有 h 个石墩(D 区),右边有一个石墩(B 区),n 只 ...
- 洛谷P1244 青蛙过河 DP/思路
又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...
- 洛谷P1244青蛙过河题解
我用的是C++来解 其实这道题很简单,只要弄清楚关系就行,和汉诺塔问题相似.不用细想顺序(青蛙就是乱跳),可将青蛙作为一个整体来想. 我们用f[h][k]表示h个石墩和k片荷叶最多的青蛙数 f[0][ ...
- java青蛙过河打字_趣味算法——青蛙过河(JAVA)
青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...
- java 独木桥_趣味算法——青蛙过河(JAVA)
青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...
- P1244 [NOI2000] 青蛙过河(普及-)
传送门:[NOI2000] 青蛙过河 - 洛谷 思路:由题意容易得知当只有m片荷叶时,有m+1只青蛙可以过河,增加一个石墩,此时状态为 f[1][m],此时可以过河的青蛙数为2m+2只,石墩上面可以站 ...
- 两个各四只青蛙过河java_趣味算法——青蛙过河(JAVA)
/*** 青蛙过河 *@authorrubekid **/ public classRiverFrog {public static final int LEFT_FROG = -1;public s ...
- nyoj-619 青蛙过河
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=619 题目大意:就是有一条宽为L的河,河上有n个石头,每个石头与河对岸的距离为a[i],然 ...
- 青蛙过河 猴子爬山 兔子繁殖 开宝箱2 找气球 指针函数 铺地砖
Problem A: 青蛙过河 Description 一条小溪尺寸不大,青蛙可以从左岸跳到右岸,在左岸有一石柱L,面积只容得下一只青蛙落脚,同样右岸也有一石柱R,面积也只容得下一只青蛙落脚.有一队青 ...
最新文章
- VirtualBox安装Ubuntu详细过程
- Camel In Action 读书笔记 (1)
- Android --- Android Studio 内无法直接运行 main 方法
- iScroll 5 API 中文版
- BZOJ3609 [Heoi2014]人人尽说江南好 【博弈】
- 场景化封装,一站式使用,普惠AI集成 ——阿里云发布智能媒体管理产品
- mac电脑bash_profile创建,打开,编辑,保存
- 计算机音乐的制作流程,Premiere制作音乐电子相册的方法和流程 计算机类数媒...
- TM(qq) 默认表情丢失
- php会议预约,会议预约系统-信息发布系统|多媒体信息发布系统|视展信息发布系统首页...
- python面板数据模型_面板数据模型选择
- office新建文件打开提示文件格式或扩展名无效
- linux 文件系统架构
- APP首次启动提示开启定位服务
- 大姐夫再冲世界首富,亚马逊HQ2的赢家已经初现。。。
- ICLR 2022最佳论文解读
- win7系统下联想thinkpad x220笔记本电脑关闭触摸板
- 如何把thrift rpc转换为http
- 【PyTorch】PyTorch搭建神经网络处理图片分类的完整代码
- NB-IoT使用CoAP协议接入华为IoT平台(NB-IoT项目实战专栏—8)