Train Problem II

import java.util.*;
import java.math.*;
public class Main
{
	public static void main(String []args)
	{
		Scanner cin=new Scanner(System.in);
		 int i,n;
		while(cin.hasNext())
		{	
		    n=cin.nextInt();
		    BigInteger s1 = BigInteger.valueOf(1);
		    BigInteger s2 = BigInteger.valueOf(1);
		    BigInteger s3 = BigInteger.valueOf(1);
			for(i=1;i<=n;i++)
			    s1 = s1.multiply(BigInteger.valueOf(i));
			for(i=n+2;i<=2*n;i++)
			    s2 = s2.multiply(BigInteger.valueOf(i));
			s3 = s2.divide(s1);
			System.out.println(s3);	
		}
	}
}


这个题目求的是n个数字出栈的所有可能序列,利用公式count=C(2*n,n)-C(2*n,n-1);

进行进一步的化简得到count=(n+2)*(n+3)*……*(2*n)/(1*2*3……*n);

然后进行大数的操作,由于C语言实现比较麻烦,所以选用了Java的大数处理,果断AC了!

原文地址:https://www.cnblogs.com/ouyangduoduo/p/2556616.html