我觉得我可以解决你们遇到这一题的大多数疑问。不信的话你来蛮看看!!!
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
对每组输入,输出有一行,输出最多能跳过的青蛙数目。
Sample Input
0 2 1 2
Sample Output
3 6
Hint
这边说一下,我只说思路,不说代码,因为相信你们找到这边的时候已经看过很多的代码了。尚且我的代码也跟他们的差不多,所以这边我只说原理,而且我觉得我应该知道你们大多数的疑问,并且我有把握把这个疑问给你说清楚。
思路:
首先我们先模拟一下一个石柱与一个叶子的情况:
根据题目意思我们可以得到这个答案是:4
(解释:一个叶子一个石柱,一个叶子只能容纳一只青蛙,一个石柱可以容纳不限只青蛙。然后我们首先先跳一只到叶子上,我们把这只青蛙设定一个序号叫它为1好吧。然后接着2跳到柱子上,然后1跳到2的上面,然后三跳到叶子上,然后4跳到河对岸的柱子上,然后接着3,然后1跳到荷叶上,然后接着2,1。)
然后我们模拟两个柱子和一个叶子的情况:
根据题意此时我们同理可以得到一个答案为:8
然后再模拟一个三个柱子和一个叶子的情况:
根据题意此时我们同样可以得到一个答案为:16
此时到这里已经基本可以不用在进行一个模拟了,因为基本的一个规律已经出来了。此时我们来研究两个柱子和一个叶子的情况和三个柱子和一个叶子的情况。
在两柱子和一个叶子的情况下时候。我们可以知道不管哪一种情况我们都是要跳到河对岸的唯一的一个柱子上,此时这个这个河对岸的唯一的柱子我们暂且叫它A柱。因为A柱是答案也就是我们两个柱子个一个叶子的所有可能性对吧。然后我们再看三个柱子和一个叶子,那么我们是不是可以看做为是在两个柱子和一个叶子的情况下在加了一个柱子,那么这时,你看我们的多加的这一个柱子是不是最大承载的就是我们两个柱子和一个叶子的情况,那么好了我们在两个柱子一个叶子的情况下多加的这一个柱子的最大承载值就是我们两个柱子和一个叶子的所有可能情况。所以此时我们可以将这个加的这个柱子单独独立出去,那么这个问题是不是再次回到了两个柱子一个叶子的情况。所以此时我们可以得出一个结论,我们多加的这个柱子是原来柱子的减一的所有可能情况,也就是
F(当前情况下所有青蛙的总量) = f(当前情况下柱子减一的所有青蛙总量)*2
所以到这里我解释完了,相信你也看懂了,觉得还不错的话,点个赞呗!!!