卡特蘭數及其應用總結

2021-10-02 21:15:23 字數 1681 閱讀 1394

優秀blog

優秀blog 定義

卡特蘭數是組合數學中乙個常出現在各種計數問題中的數列。

給定n個0,n個1,排成2n的序列,滿足:任意字首中0的個數大於等於1的個數的排列方式種數,即為卡特蘭數。

其前幾項為(從第零項開始) : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796

遞推公式

設h(n)為catalan數的第n+1項,令h(0)=1,h(1)=1

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

eg : h(3)=h(0) *h(2)+h(1) *h(1)+h(2) *h(0)=1 *2+1 *1+2 *1=5

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

遞推關係的解為:

h(n)=c(2n,n)/(n+1) (n=0,1,2,…)

遞推關係的另類解為:

h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,…)

求卡特蘭數—**

用組合數算

組合數的計算

for

(int i=

0; i<=

4000

; i++

) c[i][0

]= c[i]

[i]=1;

for(

int i=

2;i<=n;i++

)for

(int j=

1;j<=i/

2;j++

)

公式:h(n) = c(2n,n) - h(2n,n-1)

注意: int c[maxn][maxn]; 要寫到main外面

for

(int i=

0; i<=

4000

; i++

) c[i][0

]= c[i]

[i]=1;

for(

int i=

2; i<=

4000

; i++

)for

(int j=

1; j<=i/

2; j++

) cin >> n;

cout <<

(c[2

*n][n]

- c[

2*n]

[n-1

]+ mod)

% mod << endl;

#include

#include

#include

#include

#include

#define ll long long

using

namespace std;

const

int mod=

1e9+7;

const

int maxn=

2100

;ll dp[maxn]

;ll mypow

(ll a,ll b)

return ans;

}int

main

(void

)

卡特蘭數及應用

卡特蘭數是組合資料中乙個常在各種計數問題中出現的數列,由比例時的數學家歐仁.查理.卡特蘭 1814 1894 命名。c0 1而c1 1,c2 2,c3 5,c4 14,c5 42,c6 132,c7 429,c8 1430,c9 4862 c10 16796 c11 58786 c12 208012...

卡特蘭數的應用

卡特蘭數又稱卡塔蘭數,英文名catalan number,是 組合數學 中乙個常出現在各種計數問題中出現的 數列。以 比利時的數學家歐仁 查理 卡塔蘭 1814 1894 的名字來命名,其前幾項為 1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,...

卡特蘭數,高精度卡特蘭數

簡單介紹 卡特蘭數是組合數學中常常出現的乙個數列。個人認為不管是遞推公式還是代表的含義都比斐波那契數列難理解一些。遞推公式 應用 1.cn表示長度2n的dyck word的個數。dyck word是乙個有n個x和n個y組成的字串。且全部的字首字串皆滿足x的個數大於等於y的個數。下面為長度為6的dyc...