hdu 1130 How Many Trees? 【卡特兰数】

时间:2021-06-13 04:49:07

题目

题意:给你一个数字n,问你将1~n这n个数字,可以组成多少棵不同的二叉搜索树。

1,2,5,14……根据输出中的规律可以看出这是一个卡特兰数的序列。于是代用卡特兰数中的一个递推式:

hdu 1130 How Many Trees? 【卡特兰数】

因为输入可取到100,用无符号位计算最高可计算33个卡特兰数,所以可以用java中的大数

hdu 1130 How Many Trees? 【卡特兰数】

import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
BigInteger[] ans = new BigInteger[105];
ans[0] = BigInteger.valueOf(1);
for (int i = 1; i <= 100; ++i) {
ans[i] = ans[i - 1].multiply(BigInteger.valueOf(4 * i - 2)).divide(BigInteger.valueOf(i + 1));
}
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
System.out.println(ans[n]);
}
in.close();
}
}