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
n個の結点をあげて、何個の二叉木を形成することができます
カトラン数-高精度
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;
}