E : 告辞
Progress Bar
时间限制:1 Sec 内存限制:256 MiB
提交:434 答案正确:105
题目描述
整个世界都在散发着恋爱的恶臭,只有spring依旧保持着单身贵族的清香。
spring单身久了,煮饺子看见两个黏在一起的都要强行分开,所以在看到凸n边形的时候,总是习惯性的拆分成n-2个小三角形,毕竟第三者插足是spring最喜闻乐见的,那么给出一个凸n边形,有多少种方法能够将凸n边形分解成n-2个小三角形。
输入
输入一个正整数n,表示有个凸n变形 2<n<30
输出
输出有多少种方法能够将凸n边形分解成n-2个小三角形。
样例输入
复制
3 5
样例输出
复制
1 5
提示
卡特兰数
令h(0)=1,h(1)=1,catalan数满足递推式 [2] :
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (n>=2)
例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2
扫描二维码关注公众号,回复:
2377602 查看本文章
h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5
h(n)=h(n-1)*(4*n-2)/(n+1);
递推关系的解为:
h(n)=C(2n,n)/(n+1) (n=0,1,2,...)
递推关系的另类解为:
h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...)
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#define ll long long
using namespace std;
#define N 100
ll dp[40];
int main()
{
ll n;
dp[1]=1ll;
dp[2]=2ll;
for(int i=3;i<=27;i++){
dp[i]=2ll*(2ll*i-1ll)*dp[i-1]/(i+1ll);
}
while(scanf("%lld",&n)!=EOF){
printf("%lld\n",dp[n-2]);
}
return 0;
}