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

2021-09-22 10:39:54 字數 2513 閱讀 9939

簡單介紹:卡特蘭數是組合數學中常常出現的乙個數列。

個人認為不管是遞推公式還是代表的含義都比斐波那契數列難理解一些。

遞推公式:

應用:1.cn表示長度2n的dyck word的個數。dyck word是乙個有n個x和n個y組成的字串。且全部的字首字串皆滿足x的個數大於等於y的個數。下面為長度為6的dyck words

***yyy xyxxyy xyxyxy xxyyxy xxyxyy

分析:對於n個x,n個y的排列來說一共同擁有c(n,2n)種。還要排除當中不符合要求的排列。

不符合條件的排列對於某個第2*m+1位,一定存在之前有m個x,m+1個y,剩下的2n-2m-1位中有n-m個y。n-m-1個x。

對於全部m,它們的種類之和為c(n+1,2n),所以cn=c(n,2n)-c(n+1,2n),即卡特蘭數。

2.將上述x,y換成左右括號詢問正確匹配的括號數種類是相同的想法。

3.cn表示在乙個圓上有2n個點。用n條線把這2n個兩兩組成一隊,而且每條線不能相交,問有多少種寫法。

分析:將全部點編號為1~2n,對於1號點,假設它與2號點相連。那麼1,2之間的連線方法為h(0),剩餘點的連法為h(n-1)種。假設1號點和4號點相連。1,4之間的連線方法為h(1),剩餘h(n-2)種,所以能夠推得h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0)。

詳細題目:hdu 1134 

4.用n個節點建立一棵二叉搜尋樹(每乙個節點的全部左子節點都小於本身。每乙個節點的全部右子節點都大於本身)。能建立的種類數為h(n)種。

詳細題目:hdu 1130 

**(高精度卡特蘭數):

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll;

typedef unsigned long long ull;

using namespace std;

const int ten[4]= ;

const int maxl = 300;

struct bignumber

while(d[0]>1&&d[d[0]]==0)

d[0]--;

}bignumber()

bignumber(int x)

printf("\n");

}void tostring()

for(i=d[0]-1; i>0; i--)}}

} zero=bignumber(),d,temp,mid1[15],a[3005];

bool operator < (const bignumber &a,const bignumber &b)

bignumber operator +(const bignumber &a,const bignumber &b)

while(x!=0)

return c;

}bignumber operator -(const bignumber &a,const bignumber &b)

while((c.d[0]>1)&&(c.d[c.d[0]]==0))

c.d[0]--;

return c;

}bignumber operator *(const bignumber &a,const bignumber &b)

c.d[i+b.d[0]]=x;

}while((c.d[0]>1)&&(c.d[c.d[0]]==0))

--c.d[0];

return c;

}bool smaller(const bignumber &a,const bignumber &b,int delta)

bignumber operator *(const bignumber &a,const int &k)

while(x>0)

while((c.d[0]>1)&&(c.d[c.d[0]]==0))

c.d[0]--;

return c;

}bignumber operator /(const bignumber &a,const bignumber &b)

temp/=2;}}

c.d[0]=max(1,a.d[0]-b.d[0]+1);

while((c.d[0]>1)&&(c.d[c.d[0]]==0))

c.d[0]--;

return c;

}bignumber operator %(const bignumber &a,const bignumber &b)

bignumber c[105];

void init()

void solve()

}int main()

卡特蘭數和超級卡特蘭數

這篇部落格主要是想講一下超級卡特蘭數 大施洛德數 順帶就想講一下卡特蘭數.卡特蘭數記為 c n c 1 1 forall n geq 2,c n sum c i c 前幾項大概是 1,1,2,5,14,42,132.直接遞推未免效率太低,我們考慮用生成函式優化.顯然有 c x c x 2 x 解得 ...

卡特蘭數 Catalan

問題 程式設計之美 第4.3節中提到了 買票找零 問題,查閱了下資料,此問題和卡特蘭數 cn有關,其定義如下 卡特蘭數真是乙個神奇的數字,很多組合問題的數量都和它有關係,例如 yyy xyxxyy xyxyxy xxyyxy xxyxyy ab c d a bc d ab cd a bc d a b...

卡特蘭數(2)

原部落格 卡特蘭數 1 通項公式 h n c n,2n n 1 2n n n 1 2遞推公式 h n 4 n 2 n 1 h n 1 h n h 0 h n 1 h 1 h n 2 h n 1 h 0 h n c n,2n c n 1,2n 3前幾項為 h 0 1,h 1 1,h 2 2,h 3 5...