How Many Trees?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3397 Accepted Submission(s):
1964
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) and any node
w reachable from its right has label (w) > 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?
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
Source
Recommend
http://blog.csdn.net/sunshine_yg/article/details/47685737 卡特兰数 #include<iostream> #include<cstring> #include<string> #include<cstdio> #include<algorithm> using namespace std; const int base = 10000; const int N = 100 + 2; int katelan[N][N]; int main() { katelan[1][1] = 1; katelan[2][1] = 2; katelan[3][1] = 5; for (int i = 4; i <= 100; i++) { for (int j =1; j<100; j++)//大数乘法 { katelan[i][j] += katelan[i - 1][j] * (4 * i - 2); katelan[i][j + 1] += katelan[i][j] / base; katelan[i][j] %= base; } int temp; for (int j = 100; j > 0; j--)//大数除法 { temp=katelan[i][j] % (i + 1); katelan[i][j-1]+=temp* base; katelan[i][j] /= (i + 1); } } int n; while (cin >> n) { int i = 100; while (katelan[n][i] == 0)i--; cout << katelan[n][i--]; while (i > 0) printf("%04d", katelan[n][i--]); cout << endl; } return 0; }