Ⅳ.Catalan数

Catalan数首先是由Euler在精确计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,它经常出现在组合计数问题中。
      问题的提出:在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数目用hn表示,hn即为Catalan数。例如五边形有如下五种拆分方案(图3-14),故h5=5。求对于一个任意的凸n边形相应的hn。
 

Catalan数是比较复杂的递推关系,尤其在竞赛的时候,选手很难在较短的时间里建立起正确的递推关系。当然,Catalan数类的问题也可以用搜索的方法来完成,但是,搜索的方法与利用递推关系的方法比较起来,不仅效率低,编程复杂度也陡然提高。
 
//include<AC自动机>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
int f[100000];
using namespace std;
int main()
{
    int n;
    cin>>n;
    f[2]=1;
    f[3]=1;
    for(int i=4;i<=n;++i)
    {
        for(int j=2;j<=n-1;j++)
        {
            f[i]=f[j]*f[i-j+1]+f[i];
        }
    }
    cout<<f[n];
    return 0;
}

 

 

posted @ 2017-03-22 10:20  zzzzx  阅读(243)  评论(0编辑  收藏  举报