思路:这个题和http://blog.csdn.net/kkkwjx/article/details/20038467 基本一样。只不过数据更强一点,把数组改大之后就能AC。
我这里尝试了Java的大数,效率比我自己写的要快一些。
import java.util.*;
import java.io.*;
import java.math.BigInteger;
public class Main
{
public static void main(String[] args)
{
BigInteger[][] dp = new BigInteger[155][155];
for(int i=0;i<=150;++i)
for(int j=0;j<=150;++j)
if(i==0) dp[i][j]=new BigInteger("1");
else dp[i][j]=new BigInteger("0");
for(int i=1;i<=150;++i)
for(int j=1;j<=150;++j)
for(int k=1;k<=i;++k)
dp[i][j]=dp[i][j].add(dp[i-k][j].multiply(dp[k-1][j-1]));
Scanner in = new Scanner(System.in);
while(in.hasNextInt())
{
int a=in.nextInt(),b=in.nextInt();
if(a%2!=0) System.out.println(0);
else System.out.println(dp[a/2][b].subtract(dp[a/2][b-1]));
}
}
}