结果是卡特兰数乘以阶乘。
阶乘很好理解,卡特兰数是因为树只能向左或者向右延生。
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1131
import java.io.*;
import java.math.*;
import java.util.*;
public class Main{
public static void main(String argv[]) {
Scanner cin = new Scanner(System.in);
BigInteger [] f = new BigInteger[105]; // n!
BigInteger temp ;
f[1] = BigInteger.valueOf(1);
for(int i = 2 ; i <= 100 ; i++) {
temp = BigInteger.valueOf(i);
f[i] = f[i-1].multiply(temp);
}
BigInteger [] C = new BigInteger[105] ; //Catalan(n)
BigInteger temp1,temp2; //C[n] = C[n-1] * (4 * n - 2) / (n + 1);
C[1] = BigInteger.valueOf(1);
for(int i = 2 ; i <= 100 ; i++) {
temp1 = BigInteger.valueOf( 4 * i - 2 );
temp2 = BigInteger.valueOf( i + 1);
C[i] = C[i-1].multiply(temp1);
C[i] = C[i].divide(temp2);
}
int n;
while(cin.hasNext()) {
n = cin.nextInt();
if(n == 0) break;
System.out.println(f[n].multiply(C[n]));
}
}
}
//n! * Catalan(n)