1. 程式人生 > >第五屆藍橋杯決賽 第二題 出棧次序(catalan數)

第五屆藍橋杯決賽 第二題 出棧次序(catalan數)

出棧次序

X星球特別講究秩序,所有道路都是單行線。一個甲殼蟲車隊,共16輛車,按照編號先後發車,夾在其它車流中,緩緩前行。
路邊有個死衚衕,只能容一輛車通過,是臨時的檢查站,如圖【p1.png】所示。
X星球太死板,要求每輛路過的車必須進入檢查站,也可能不檢查就放行,也可能仔細檢查。
如果車輛進入檢查站和離開的次序可以任意交錯。那麼,該車隊再次上路後,可能的次序有多少種?
為了方便起見,假設檢查站可容納任意數量的汽車。
顯然,如果車隊只有1輛車,可能次序1種;2輛車可能次序2種;3輛車可能次序5種。

現在足足有16輛車啊,親!需要你計算出可能次序的數目。


の,圖形看起來就很像棧哦,就聯想到了出棧進棧,一個車進衚衕必須要出衚衕,等同於棧的用法。

改題大意是求進出棧的總的方法數。

catalan數:

百度給出的公式:

h(n)=h(0)*h(n-1)+h(1)*h(n-2)+.....+h(n-1)*h(0)  (n>=2,h(0)=h(1)=1)

通項:C(2n,n)/(n+1)   其實會了這個答案秒秒鐘

還是通過例題來真正認識一下catalan數吧,具體定義去百度

① 括號的匹配方式

有n對括號,即2n個符號,則h(n)=f(2n)

故第0個符號一定是左括號,右括號一定是2i+1個字元(一定是奇數字符,這樣中間的字元方可成功匹配)

則第0個字元與第1個字元匹配的次數是f(0)*f(2n-2)

第0個字元與第3個字元匹配的次數是f(2)*f(2n-4)  =>將所有括號分成了兩部分,一部分是兩個符合,另一部分是2n-4個符號

②出棧序列

順序進棧,進棧相當於是左括號,出棧相當於是右括號,n個數字,依次進棧構成了有2n個數字的序列

有 f(2n)=f(0)*f(2n-2)+f(2)*f(2n-4)+...+f(2n-2)*f(0)

其中當n=0時,h(0)=f(2*0)=0;

當n=1時,h(1)=f(2*1)=1;

n=2,h(2)=f(2*2)=2;

n=3,h(3)=f(2*3)=f(0)*f(4)+f(2)*f(2)+f(4)*f(0)=5;

.

則h(16)=C(16*2,16)/17=35357670

③圓連線點

一個圓周長等分n個點,每兩個點之間連線,使得各線之間不相交的情況總共有多少種。

同樣可類比成出棧進棧,取任意一個點為0點,則0點必須與2n+1個點相連,必須成對同時滿足,與括號匹配類同

類似的還有二叉樹。

還有哦,如果你看到有這樣n個序列,發現有1 1 2 5 的規律,你可以試著繼續往下算一算,說不定真成了