Circle - SGU 130(递推)

题目大意:一个圆上有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 = 31;

int main()
{
    long long f[MAXN] = {1, 1, 2};

    for(int i=3; i<MAXN; i++)
    for(int j=0; j<i; j++)
    {
        f[i] += f[j] * f[i-j-1];
    }

    int N;

    scanf("%d", &N);

    printf("%lld %d\n", f[N], N+1);

    return 0;
}

 

posted @ 2015-09-25 20:24  无忧望月  阅读(115)  评论(0编辑  收藏  举报
levels of contents