POJ2084 Game of Connections(catalan数)

http://poj.org/problem?id=2084
大意:有2n个数字形成一个圆形,直线段连接一对数字,每一个数字必须连接到另一个数字上。(没有相交的线段)
分析:
POJ2084 Game of Connections(catalan数)_第1张图片
现在假设1是要连接的点,它和4相连,为了不破坏规矩——“ 没有相交的线段",2,3只能在右边的圆形区域进行匹配,4——8也不能越过红线,在三角形中进行连线匹配。设n个点的匹配方案数是h(n),那么中的结果就该是h(2)h(5)。极限情况:1和2连接,答案就该是h(0)h(n-1); 1和8连接,答案是h(n-2)h(1)。没错,真相只有一个!这是catalan数。注意:这里的n不是2n,因为1,4相连和4,1相连是一回事。
由通项公式得到:h(n)=C(2n,n)/(n+1)=(2n)!/[n!(n+1)!]
n达到了100,涉及到 大数。。

import java.math.BigInteger;
import java.util.*;
public class Main {
    public static BigInteger []fac=new BigInteger[405];
    public static void get(){
        fac[1]=BigInteger.ONE;
        for(int i=2;i<=400;i++){
            fac[i]=fac[i-1].multiply(BigInteger.valueOf(i));
        }
    }
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        int n;
        get();
        while(cin.hasNext()){
            n=cin.nextInt();
            if(n==-1) break;
            System.out.println(fac[2*n].divide(fac[n]).divide(fac[n+1]));
        }
    }
}

做题时,如果不能严格证明它是catalan,也可以从前几项猜想可能性。catalan的前几项:
1
2
5
14
42
132
429
1430
4862
16796
58786
208012

爆炸型增长,哈哈哈。

你可能感兴趣的:(Catalan)