2084 Game of Connections
問題概要
円周上に点が順に1,2,3,...,2nと並んでいる。
これらの点を全て、交差しない線分で一対一にペアを作るように結ぶ。
このような結び方は何通りあるか求めよ。
n≦100とする。
解法
1番の点が2i番目に結ばれるとする。
すると、円は2(i-1)個の点の部分と2(n-k)個の部分に分かれる。
全体の結び方はそれぞれの場合の数の積の和だから、
dp[n]=Σ{dp[i-1]*dp[n-k]|1≦i≦n}という漸化式が成り立ち、DPできる。
答えは100までなのであらかじめ計算しておくとよい。
ソースコード
class Main { public static void main(String[] args) { new Main().new PKU2084().run(); } class PKU2084{ void run(){ BigInteger dp[]=new BigInteger[101]; dp[0]=BigInteger.ONE; for(int i=1;i<101;i++){ dp[i]=BigInteger.ZERO; for(int k=1;k<=i;k++)dp[i]=dp[i].add(dp[i-k].multiply(dp[k-1])); } int n; Scanner sc=new Scanner(System.in); for(;;){ n=sc.nextInt(); if(n<=0)break; System.out.println(dp[n]); } } } }