卡特蘭數(HDU 1023)

2021-06-26 23:54:28 字數 2447 閱讀 5445

卡特蘭數又稱卡塔蘭數,是組合數學中乙個常出現在各種計數問題中出現的數列。由以比利時的數學家歐仁·查理·卡塔蘭 (1814–1894)命名。

卡特蘭數

前幾項為 (oeis中的數列a000108): 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

令h(1)=1,h(2)=1,catalan數滿足遞迴式:

例如:h(3)=h(1)*h(2)+h(2)*h(1)=1*1+1*1=2

h(4)=h(1)*h(3)+h(2)*h(2)+h(3)*h(1)=1*2+1*1+2*1=5

若h(0)=1;h(1)=1;h(2)=2;h(3)=5;  ····有另類的遞迴式

另類遞迴式:

h(n)=h(n-1)*(4*n-2)/(n+1);

該遞推關係的解為:

h(n)=c(2n,n)/(n+1) (n=1,2,3,...)

實質上都是遞迴等式的應用

矩陣鏈乘: p=a1×a2×a3×……×an,依據乘法結合律,不改變其順序,只用括號表示成對的乘積,試問有幾種括號化的方案?(h(n)種)

乙個棧(無窮大)的進棧序列為1,2,3,…,n,有多少個不同的出棧序列?

分析對於每乙個數來說,必須進棧一次、出棧一次。我們把進棧設為狀態『1』,出棧設為狀態『0』。n個數的所有狀態對應n個1和n個0組成的2n位二進位制數。由於等待入棧的運算元按照1‥n的順序排列、入棧的運算元b大於等於出棧的運算元a(a≤b),因此輸出序列的總數目=由左而右掃瞄由n個1和n個0組成的2n位二進位制數,1的累計數不小於0的累計數的方案種數。

在2n位二進位制數中填入n個1的方案數為c(2n,n),不填1的其餘n位自動填0。從中減去不符合要求(由左而右掃瞄,0的累計數大於1的累計數)的方案數即為所求。

不符合要求的數的特徵是由左而右掃瞄時,必然在某一奇數字2m+1位上首先出現m+1個0的累計數和m個1的累計數,此後的2(n-m)-1位上有n-m個 1和n-m-1個0。如若把後面這2(n-m)-1位上的0和1互換,使之成為n-m個0和n-m-1個1,結果得1個由n+1個0和n-1個1組成的2n位數,即乙個不合要求的數對應於乙個由n+1個0和n-1個1組成的排列。

反過來,任何乙個由n+1個0和n-1個1組成的2n位二進位制數,由於0的個數多2個,2n為偶數,故必在某乙個奇數字上出現0的累計數超過1的累計數。同樣在後面部分0和1互換,使之成為由n個0和n個1組成的2n位數,即n+1個0和n-1個1組成的2n位數必對應乙個不符合要求的數。

因而不合要求的2n位數與n+1個0,n-1個1組成的排列一一對應。

顯然,不符合要求的方案數為c(2n,n+1)。由此得出 輸出序列的總數目=c(2n,n)-c(2n,n+1)=1/(n+1)*c(2n,n)。

(這個公式的下標是從h(0)=1開始的)

類似問題

有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?(將持5元者到達視作將5元入棧,持10元者到達視作使棧中某5元出棧)

類似:(1)有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?(將持5元者到達視作將5元入棧,持10元者到達視作使棧中某5元出棧)

(2)在圓上選擇2n個點,將這些點成對連線起來,使得所得到的n條線段不相交的方法數。

求將乙個凸多邊形區域分成三角形區域的方法數。

類似:一位大城市的律師在她住所以北n個街區和以東n個街區處工作。每天她走2n個街區去上班。如果她從不穿越(但可以碰到)從家到辦公室的對角線,那麼有多少條可能的道路?

類似:在圓上選擇2n個點,將這些點成對連線起來使得所得到的n條線段不相交的方法數?

類似:一位大城市的律師在她住所以北n個街區和以東n個街區處工作。每天她走2n個街區去上班。如果她

從不穿越(但可以碰到)從家到辦公室的對角線,那麼有多少條可能的道路?

類似:在圓上選擇2n個點,將這些點成對連線起來使得所得到的n條線段不相交的方法數?

給定n個節點,能構成多少種不同的二叉樹?

(能構成h(n)個)

(這個公式的下標是從h(0)=1開始的)

#includeint a[105][105];

int b[105];

void catalan()

while(!a[i][len-1])

len--;

b[i] = len; }}

int main()

return 0;

}

HDU 1023 卡特蘭數打表)

卡特蘭數 h 0 1 h 1 1 n 4 n 2 n 1 h n 1 n 2 其餘遞推式 h n c 2n,n n 1 n 0,1,2,h n c 2n,n c 2n,n 1 n 0,1,2,前幾項為 1,1,2,5,14,42,132,429,1430,4862,16796,58786,20801...

HDU 1023 卡特蘭數 數學

題意是求一列連續公升序的數經過乙個棧之後能變成的不同順序的數目。用乙個二維陣列,a i 0 表示第 i 個卡特蘭數的位數,a i j j 0 中存第 i 個卡特蘭數從低位到高位的第 j 個數,也就是說數是倒過來存的,輸出時要倒著輸出。如下 1 include2 int a 105 100 3 voi...

hdu4828卡特蘭數

題目大意 有2行n列的長方形格仔,把1到2n這些數放進格仔裡面,使每行每列都遞增。也就是相當於,n個0和n個1排序,要求每個點的前面都要求0的個數大於等於1的個數,問排列的順序的種數。可以轉換為卡特蘭數,有遞推式 cn 1 4n 2 n 2 cn 具體卡特蘭數的資料 要用到逆元 include in...