题目描述 Description
在一个圆上,有2*K个不同的结点,我们以这些点为端点,连K条线段,使得每个结点都恰好用一次。在满足这些线段将圆分成最少部分的前提下,请计算有多少种连线的方法
输入描述 Input Description
仅一行,一个整数K(1<=K<=30)
输出描述 Output Description
两个用空格隔开的数,后者为最少将圆分成几块,前者为在此前提下连线的方案数
样例输入 Sample Input
2
样例输出 Sample Output
2 3
Catalan 数
公式:h(n)=( (4*n-2)/(n+1) )*h(n-1)
#include<stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
long long f[62];
f[1]=1;
for (int i=2; i<62; i++)
{
f[i]=ceill((4.0*i-2))/(i+1)*f[i-1];
}
int k;
while (cin>>k)
{
cout<<f[k]<<" "<<k+1<<endl;
}
return 0;
}