n个节点的二叉树计数
分治,把一棵二叉树的解分成它的两棵子树的解
C(n) += C(i)*C(n-1-i) i=[0, n-1]
要注意最后的解要乘与 n!
C(0) = 1
C(1) = C(0)*C(0) = 1
C(2) = C(0)*C(1) + C(1)*C(0)
/*
* Created by neverchanje on 15/3/1.
*/
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
static int n;
static BigInteger[] C = new BigInteger[301];
static BigInteger[] A = new BigInteger[301];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
C[0] = new BigInteger("1");
for(int v=1; v<=300; v++)
{
C[v] = new BigInteger("0");
for(int i=0; i<v; i++)
{
C[v] = C[v].add(C[i].multiply(C[v-1-i]));
}
}
A[0] = new BigInteger("1");
for(int i=1; i<=300; i++)
{
A[i] = A[i-1].multiply(new BigInteger(String.valueOf(i)));
C[i] = A[i].multiply(C[i]);
}
while(in.hasNext()) {
n = in.nextInt();
if(n==0)
break;
System.out.println(C[n].toString());
}
}
}