Circle - SGU 130(递推)

时间:2022-07-20 22:18:09

题目大意:一个圆上有2K个点,用K个线把他们连接起来,求出这些线最少可以把这个圆分成P部分,有N种分割方法。输出N和P。

分析:分割线一定是相互不相交的线,所以可以把这写分成两部分,f[i] += f[j]*f[i-j-1](j[0....i-1])。

===========================================================================================

#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std; const int MAXN = ; int main()
{
long long f[MAXN] = {, , }; for(int i=; i<MAXN; i++)
for(int j=; j<i; j++)
{
f[i] += f[j] * f[i-j-];
} int N; scanf("%d", &N); printf("%lld %d\n", f[N], N+); return ;
}