题目描述
在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形剖分成若干个三角形,现在的任务是输入多边形的边数n,求不同剖分的方案数Cn。
输入
输入一个整数n,表示多边形的边数,其中n小于等于30
输出
输出一个整数,表示答案
样例输入
5
样例输出
5
这个问题是大数学家欧拉提出的,他自己列出了一些答案
C3=1
C4=2
C5=5
C6=14
C7=42
C8=132
C9=429
有另一位数学家给出公式:
Cn=C2*Cn-1+C3*Cn-2+...+Cn-2*C3+Cn-1*C2
其中C2=1
那么
C10=C2*C9+C3*C8+C4*C7+C5*C6+C6*c5+C7*C4+C8*C3+C9*C2
=1*429+1*132+2*42+5*14+14*5+42*2+132+1+429*1
=1430
#include<bits/stdc++.h>//头文件
using namespace std;
long long q(int n)//函数
{
int s;//计数器
if(n==2||n==3)return 1;//如果是2或3那就返回1
for(int i=2;i<=n-1;i++)s+=q(i)*q(n-i+1);//用公式递归
return s;//返回s
}
int main()
{
int n;//多边形的边数
scanf("%d",&n);//输入
printf("%lld",q(n));//输出
return 0;
}