Catalan数列

来源:互联网 发布:软件开发技术 冯博琴 编辑:程序博客网 时间:2024/06/07 22:58

    Catalan数列

Catalan公式:

 f(n)=f(1)*f(n-1)+f(2)*f(n-2)+f(3)*f(n-3)+......+f(n-1)*f(1)

 前16个:1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 (在处理数据的过程中应该用到高精度)

看下面例题:

将一个凸多边形区域分成三角形区域的方法数?

令hn表示具有n+1条边的凸多边形区域分成三角形的方法数。同时令h1=1,则hn满足递推关系

hn=h1hn-1+h2hn-2+...+hn-1h1(n>=2)

该递推关系的解为hn=c(2n-2,n-1)/n (n=1,2,3,...)

其对应的序列为1,1,2,5,14,42,132,....从第二项开始分别是三边形,四边形,...的分法数,即k边形分成三角形

的方法数为hk=c(2k-4,k-2)/(k-1)(k>=3)

Cn=c(2k,k)/(k+1)  (k>=0,n=k+1)    对应的序列为1,1,2,5,14,42,132,...

序列1,1,2,5,14,42,132,....叫Catalan数列。

下列问题都是Catalan数列:

1.有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院

无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?

2.一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果他从不穿

越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?

3.在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?

4.n个结点可够造多少个不同的二叉树?

5.一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?

附生成程序
   var
     a,b:array[1..100]of integer;
     n,k,r,i,ji:integer;
   begin
     readln(n);
     if (n=1)or(n=2) then begin writeln(1);halt;end ;

     r:=n-1;
     k:=2*(n-1);
   for i:=1 to r do
    begin
      a[i]:=i;
      b[i]:=k-r+i;
    end;
    k:=r;
    ji:=0;
  repeat
    if k=r then ji:=ji+1;
    if a[k]<b[k] then begin a[k]:=a[k]+1;
                        if k<r then for k:=k+1 to r do
                                        a[k]:=a[k-1]+1;
                    end
                    else k:=k-1;
until k=0;
writeln(ji div n);
end.
其实这样写是最最最笨的方法,可以直接用C的性质写,不用把每一个C求出来..

0 0
原创粉丝点击