数学/sgu 130 Circle
题意
一个圆上有2k点,请输出点于点之间连线使得所分区域块数最小的方案总数以及区域数
分析
2k个点最少能把平面分成k+1的区域,易证;
至于方案数,利用递推和乘法原理
令f[i]表示2i个点时的方案数,f[0]=f[1]=1,则f[i]=sigma(f[j]*f[i-j-1],0<j<i)
具体参见百度百科:卡特兰数列
Accepted Code
1 /* 2 PROBLEM:sgu130 3 AUTHER:Rinyo 4 MEMO:数学 5 */ 6 #include<cstdio> 7 long long f[40]; 8 int main() 9 { 10 int n; 11 scanf("%d",&n); 12 f[0]=f[1]=1; 13 for (int i=2;i<=n;i++) 14 for (int j=0;j<i;j++) 15 f[i]+=f[j]*f[i-j-1]; 16 printf("%I64d %d\n",f[n],n+1); 17 return 0; 18 }