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

Ⅳ.Catalan数-LMLPHP

Catalan数是比较复杂的递推关系,尤其在竞赛的时候,选手很难在较短的时间里建立起正确的递推关系。当然,Catalan数类的问题也可以用搜索的方法来完成,但是,搜索的方法与利用递推关系的方法比较起来,不仅效率低,编程复杂度也陡然提高。

//include<AC自动机>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
int f[];
using namespace std;
int main()
{
int n;
cin>>n;
f[]=;
f[]=;
for(int i=;i<=n;++i)
{
for(int j=;j<=n-;j++)
{
f[i]=f[j]*f[i-j+]+f[i];
}
}
cout<<f[n];
return ;
}
05-23 22:43