ccsu 1179 青蛙過河 遞推

2021-06-08 15:46:29 字數 1028 閱讀 5944

題目:

有一條河,左邊乙個石墩(a區)上有編號為1,2,3,4,…,n的n只青蛙,河中有k個荷葉(c區),還有h個石墩(d區),右邊有乙個石墩(b區),如下圖2—5所示。 

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,計算並輸出最多能有多少只青蛙可以根據以上規則順利過河? 

思路:若河中沒有石墩,則最多只能有m(荷葉數)+1 的青蛙按規則跳到b上,(前m只先呆在荷葉上,1只跳上b,然後……)。

河中有石墩,則將每個石墩看做b,則第乙個石墩先可有m+1只青蛙,第二個石墩可有比之前都大的m+1只,然後可將第乙個石墩上的青蛙通過荷葉移到第二個石墩上…… 由此可見到達b上的青蛙數等於可以停留在河中的青蛙數。

我們用f[m][n]表示有m個荷葉和n個石柱時,最多有多少只青蛙能夠過河。實際上石柱和岸是差不多的,比如如果我們分析有多少只青蛙可以落腳在第n個石柱上,那麼顯然這是等於f[m][n-1]的,因為只能借助其它n-1根石柱和m個荷葉來達成目的。

於是我們就得到了這樣的結論,f[m][n]=f[m][n-1](第n個石柱上的青蛙)+f[m][n-1](剩下的地方所有的可以過到對岸的青蛙)。當然,第n個石柱上的青蛙既然能到達第n個石柱,自然也可以到達右岸,因為對青蛙的操作都是可逆的(逆回去時把原本的a變成d即可)。

根據上面的公式,我們自然可以得到f[m][n]=f[m][0]*2^n,f[m][0]表示沒有石柱時一共可以過到對岸的青蛙,自然就是m+1,這樣就得到了最後的結果

(m+1)*2^n

。**直接帶公式:

#include#include#includeusing namespace std;

int main()

return 0;

}

寒假1 17號總結

有好幾天沒寫總結了,原因主要是題改不完想著明天寫總結,然而到了明天又忘了寫,只能退到後天。明日復明日,明日何其多!以後寫總結必須當天寫完,今日事今日畢。我先總結一下前幾天吧。前幾天做題完全不在狀態,總是開小差,每天的題有時連暴力分都拿不齊,改題也比較拖拉,一點都不認真,晚上一看到後面的人在腐敗我的心...

11 7多校聯考

t1 為了避免晚上種種事情導致寫不成題解就先把t1寫了,畢竟也是很值得寫的。我這道題憑著乙個半感性半理性的想法意外的水到了80分 真的是很考人品啊 學競賽啊,墜重要的就是人品!先看正解 我們可以這樣化 t s bk1 i1 a b k2 i 2 a bk3 i3 a b k4 再化簡一下 t s b...

11 7學習心得

今天上午主要學習了css居中對齊的方式和css3的邊框與動畫製作。最後的實踐階段,我們還稍微引入了一點js的內容。css的劇種對齊主要講了margin,position,float,padding,line height和 絕對定位與transform調整水平居中 這幾種垂直居中與水平居中都有各自的...