【問題描述】妖獸特攻隊(frog.cpp/c/pas)noi 2000
不甘心失敗的修羅王派出大小各不相同的一隊妖獸站在河左岸的石墩(記為a)上,要過到對岸的石礅(記為d)上去執行軍事任務。如圖8.11所示,河心有幾片荷葉(分別記為y1…ym)和幾個石墩(分別記為s1…sn)。
妖獸站隊和移動方法規則如下:
(1)每只妖獸只能站在荷葉、石墩或者比它大一號的妖獸背上(統稱為合法的落腳點);
(2)乙隻妖獸只有背上沒有其他妖獸的時候才能夠從乙個落腳點跳到另乙個落腳點;
(3)妖獸允許從左岸a直接跳到河心的石墩、荷葉和右岸的石墩d上,允許從河心的石墩和荷葉跳到右岸的石墩d上;
(4)妖獸在河心的石墩之間、荷葉之間以及石墩和荷葉之間可以來回跳動;
(5)妖獸在離開左岸石墩後,不能再返回左岸;到達右岸後不能再跳回;
(6)假定石墩承重能力很大,允許無論多少只妖獸都可待在上面。但是由於石墩面積不大,至多只能有乙隻妖獸直接站在上面,而其他的妖獸只能依規則1落在比它大一號的妖獸背上;
(7)荷葉不僅面積不大,而且負重能力也有限,至多只能有乙隻妖獸站在上面;
(8)每一步只能移動乙隻妖獸,並且移動後需要滿足站隊規則;
(9)在一開始的時候,妖獸均站在a上,最大的乙隻妖獸直接站在石墩上,而其他的妖獸依規則6站在比其大一號的妖獸背上。
妖獸希望最終能夠全部移動到d上,並完成站隊。
設河心有m片荷葉和n個石墩,請求出這隊妖獸至多有多少只,在滿足站隊和移動規則的前提下,能從a過到d。
例如當河心有一片荷葉和乙個石墩時,此時最多有4只妖獸跳動9步能夠過河。如圖所示。
【輸入格式】
檔案僅有兩行,每一行僅包含乙個整數和乙個換行/回車符。第一行數字為河心的石墩數n(0≤n≤25),第二行為荷葉數m(0≤m≤25)。
【輸出格式】
檔案中僅包含乙個數字和乙個換行/回車符。該數字為在河心有n個石墩和m片荷葉時,最多能夠過河的妖獸隻數。
【輸入樣例】11
【輸出樣例】
4//很經典的一種思想轉換,每增加乙個石墩,就相當於在前面的基礎上double一次
//就是你想,在i個石墩的時候,增加乙個石墩,此時就有i+1個石墩,把第i+1個石墩看成是對岸,這樣就可以把在i的情況下的妖獸跳到第i+1個石墩上,就相當於double一次了
//f(i,j)表示i個荷葉,j個石墩,先讓j等於0計算使用i個荷葉時的妖獸數,然後開始計算加上石墩數的時的妖獸數
//最後推到出介個公式f(n,m)=(2^n)*f(0,m);
#include#includeusing namespace std;
typedef long long ll;
int main()
return 0;
}
演算法競賽寶典 遞推演算法 過河卒
題目描述 如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點 圖中的p1,p2 p8 和 c 卒不能通過對方馬的控制點。輸入 ...
演算法競賽寶典 遞推演算法 曲線分割
問題描述 曲線分割 curve.cpp c pas 設有n條封閉曲線畫在平面上,而任何兩條封閉曲線恰好相交於兩點,且任何三條封閉曲線不相交於同一點,問這些封閉曲線把平面分割成的區域個數。輸入格式 輸入整數n。輸出格式 輸出分割的區域個數。輸入樣例 2 輸出樣例 4 找規律再與尋找變化的地方,研究變化...
演算法競賽寶典 遞推演算法 平面分割
問題描述 凸多邊形的三角形剖分 cpp c pas 傳說魔法世界的創世神使用過的一件上古神器遺失在乙個凸多邊形的二維魔法空間中,誰若擁有這件上古神器,將會成為世界之主。修羅王很想擁有這件上古神器,他打算通過若干條互不相交的對角線,把這個多邊形剖分成了若干個三角形來尋找,現在的任務是輸入凸多邊形的邊數...