clas 青蛙跳 urn n+1 sha 编号 brush log 面积
Problem Description
1)一条小溪尺寸不大,青蛙可以从左岸跳到右岸,在左岸有一石柱 L,石柱 L 面积只容得下一只青蛙落脚,同样右岸也有一石柱 R,石柱 R 面积也只容得下一只青蛙落脚. 2)有一队青蛙从小到大编号:1,2,…,n. 3)初始时:青蛙只能趴在左岸的石头 L 上,按编号一个落一个,小的落在大的上面 ----- 不允许大的在小的上面. 4)在小溪中有 S 个石柱,有 y 片荷叶. 5)规定:溪中的每个石柱上如果有多只青蛙也是大在下,小在上,每个荷叶只允许一只青蛙落脚. 6)对于右岸的石柱 R,与左岸的石柱 L 一样允许多个青蛙落脚,但须一个落一个,小的在上,大的在下. 7)当青蛙从左岸的 L 上跳走后就不允许再跳回来;同样,从左岸 L 上跳至右岸 R,或从溪中荷叶,溪中石柱跳至右岸 R 上的青蛙也不允许再离开. 问题:在已知小溪中有 s 根石柱和 y 片荷叶的情况下,最多能跳过多少只青蛙?
Input
输入数据有多组,每组占一行,每行包含 2 个数 s(s 是小溪中的石柱数目),y(y 是小溪中的荷叶数目).(0 <= s <= 10,0 <= y <= 10), 输入文件直到 EOF 为止!
Output
对每组输入,输出有一行,输出最多能跳过的青蛙数目.
再有y+1个借助荷叶跳到对岸,第一个y+1再借助荷叶跳到对岸
Example Input
1 2
0 2
Example Output
6
3
#include <stdio.h>
int XY(int m, int n)
{
if(m==0)
return n+1; //只有N个荷叶,n个青蛙调到荷叶,一个青蛙跳到对岸.
else
return 2*XY(m-1,n); // 1个石柱,y个荷叶,y+1个青蛙借助y个荷叶跳到石柱上,
,总共2*(y+1)个青蛙,m增加一个就翻一倍.
AC 日记 - - - 4
}
int main()
{
int x, y;
while(scanf("%d %d", &x, &y)!=EOF)
{
printf("%d\n",XY(x,y));
}
}
来源: http://www.bubuko.com/infodetail-2458158.html