来源:http://poj.org/problem?id=2084
题意:2*n个数围城一个圈,然后在其内部画不相交的直线,问有多少种方法。
思路:其实就是一个卡特兰数,组合数学173页有详细的证明。由于用到了大数,用java写的。
代码:
import java.util.*;
import java.math.BigInteger;
public class Main {
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
BigInteger aa[] = new BigInteger[101];
BigInteger x = new BigInteger("1");
aa[1] = x;
int y = 0,z = 0;
for(int i = 2; i <= 100; ++i){
y = 4 * i - 2;
z = i + 1;
aa[i] = aa[i-1].multiply(new BigInteger("" + y));
aa[i] = aa[i].divide(new BigInteger("" + z));
}
int n;
while(true){
n = cin.nextInt();
if(n == -1)
break;
String ss = aa[n].toString();
System.out.println(ss);
}
}
}