洛谷P1244青蛙过河

洛谷P1244青蛙过河

题目描述
有一条河,左边一个石墩(A 区)上有编号为 1,2,…,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.当一个石墩上有多只青蛙时,则上面的青蛙只能跳到比它大一号的青蛙上面。
你的任务是对于给出的 h,k,计算并输出最多能有多少只青蛙可以根据以上规则顺利过河。

输入格式
输入两个整数 h,k。

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

思路

在过河规则中,要求保证D区石墩上的青蛙编号大的在下面,小的在上面,审题时不要忽略A区和B区也是石墩,同样需要满足这个条件,即A区编号为1到n的n个青蛙从小到大堆好,利用h个石墩和k片荷叶,使这n只青蛙依然按照这个排列顺序挪到B区上,注意青蛙不能两只叠在一起跳。
p[h][k]表示h个石墩k片荷叶最多能跳过去多少只青蛙。
首先考虑h=0时的情况,我们肯定会让第1到k只青蛙,各跳到一片荷叶上,然后让第k+1只青蛙从A→B,然后依次让荷叶上的青蛙按顺序跳到B区
因此p[0][k]=k+1;
当h=1时,我们肯定希望一部分的青蛙能去D区的那一个石墩上,即编号1到k+1的青蛙跳到了D区的石墩上,跳法同h=0时的情况;另一部分青蛙能借助k片荷叶跳到B区,即编号k+2到2*k+2的青蛙跳到B区然后D区的那个石墩上的青蛙再跳到B区,跳法同h=0时的情况
因此p[1][k]=p[0][k]+p[0][k];
当h=2时,我们会希望有一部分青蛙跳借助D区的第一个石墩跳到B区,一部分借助D区的第二个石墩跳到B区
因此p[2][k]=p[1][k]*2;

得到递推关系式为:
p[i][k]=p[i-1][k]2;
k在本题中是常量
简化:p[i]=2
p[i-1],p[0]=k+1;

思路很清晰了,这里就直接贴上代码了

代码

#include<iostream>

using namespace std;

int h,k,p[25];

int main()
{
	cin>>h>>k;
	p[0]=k+1;
	for(int i=1;i<=h;i++)
		p[i]=2*p[i-1];
	cout<<p[h]<<endl;
	return 0;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值