题目地址:http://poj.org/problem?id=2084
递推地方法:
假设有n对点,答案为f(n)
假设第一个点连接了第2*k+1个点,那么此时答案为f(k)*f(n-k-1),左边k对点和右边n-k-1对点
利用加法原理,n对点,一共有∑f(k)*f(n-k-1) {k>=0&&k<n}
也就是卡特兰数
利用BigInteger就好了
import java.util.*;
import java.math.*;
import java.text.*;
import java.io.*;public class Main
{public static void main(String[] args) {Scanner cin = new Scanner(new BufferedInputStream(System.in));BigInteger[] d = new BigInteger[100+5];d[0] = BigInteger.ONE;d[1] = BigInteger.ONE;d[2] = BigInteger.valueOf(2);for(int i=3;i<=100;i++){BigInteger temp=BigInteger.ZERO;for(int k=0;k<=i-1;k++) temp=temp.add(d[k].multiply(d[i-k-1]));d[i]=temp;}while(cin.hasNext()){int n=cin.nextInt();if(n==-1) break;System.out.println(d[n]);}}
}