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
對每組輸入,輸出有一行,輸出最多能跳過的青蛙數目。
sample input
0 2sample output1 2
3這道題有點像漢諾塔問題,但是仔細看的話發現思路完全不同;6
思路如下:
1.我想引入「組」的概念,就是青蛙應該按組移動,而非單個移動,而組的大小就是荷葉的數量+1;
2.這樣只需要思考有幾組青蛙可以跳過去,便可以忽略掉荷葉的存在;
3.列出柱子數為0,1,2,3後的結果,不難發現,每多乙個柱子,多出來柱子的容量就是之前
(所有柱子上最多青蛙數量之和)+(荷葉數量+1);
亦或是上一根柱子的二倍;
於是得到公式:結果=(荷葉數+1)*(2^(柱子數));
**如下:
#includeusing namespace std;
int main()
{ int s,y,a;
while(cin>>s>>y)
{a=(y+1)*pow(2,s);
cout<
遞推遞迴練習 N 青蛙過河
description 1 一條小溪尺寸不大,青蛙可以從左岸跳到右岸,在左岸有一石柱l,石柱l面積只容得下乙隻青蛙落腳,同樣右岸也有一石柱r,石柱r面積也只容得下乙隻青蛙落腳。2 有一隊青蛙從小到大編號 1,2,n。3 初始時 青蛙只能趴在左岸的石頭 l 上,按編號乙個落乙個,小的落在大的上面 不允...
遞推遞迴練習N青蛙過河
description 1 一條小溪尺寸不大,青蛙可以從左岸跳到右岸,在左岸有一石柱l,石柱l面積只容得下乙隻青蛙落腳,同樣右岸也有一石柱r,石柱r面積也只容得下乙隻青蛙落腳。2 有一隊青蛙從小到大編號 1,2,n。3 初始時 青蛙只能趴在左岸的石頭 l 上,按編號乙個落乙個,小的落在大的上面 不允...
N 青蛙過河
description 1 一條小溪尺寸不大,青蛙可以從左岸跳到右岸,在左岸有一石柱l,石柱l面積只容得下乙隻青蛙落腳,同樣右岸也有一石柱r,石柱r面積也只容得下乙隻青蛙落腳。2 有一隊青蛙從小到大編號 1,2,n。3 初始時 青蛙只能趴在左岸的石頭 l 上,按編號乙個落乙個,小的落在大的上面 不允...