How Many Trees? HDU 1130

1956 ワード

How Many Trees? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4501    Accepted Submission(s): 2513   Problem Description A binary search tree is a binary tree with root k such that any node v reachable from its left has label (v) label (k). It is a search structure which can find a node with label x in O(n log n) average time, where n is the size of the tree (number of vertices). Given a number n, can you tell how many different binary search trees may be constructed with a set of numbers of size n such that each element of the set will be associated to the label of exactly one node in a binary search tree?     Input The input will contain a number 1 <= i <= 100 per line representing the number of elements of the set.     Output You have to print a line in the output for each entry with the answer to the previous question.     Sample Input
 
1 2 3     Sample Output
 
1 2 5
 
n個の結点をあげて、何個の二叉木を形成することができます
カトラン数-高精度
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define N 110
int n,len,ans,sum,we,a[N][N],b[N];
int catelan()
{
    len=1; 
	a[1][0]=b[1]=1;
    for(int i=2;i<110;i++)
    {
        for(int j=0;j=0;j--)
        {
            we=sum*10+a[i][j];
            a[i][j]=we/(i+1);
            sum=we%(i+1);
        }
        while(!a[i][len-1])
         len--;
        b[i]=len;
    }
}
int main()
{
    catelan();
    while(~scanf("%d",&n))
    {
        for(int i=b[n]-1;i>=0;i--)
         printf("%d",a[n][i]);
        printf("
"); } return 0; }