杭电 1023 Train Problem II

来源:互联网 发布:me452cha支持什么网络 编辑:程序博客网 时间:2024/05/02 08:48

一,题目的意思:就是在堆栈中严格递增进入堆栈,问有多少种出栈顺序。
严格递增就是按照12345进入堆栈,而不是按照21345的顺序进入堆栈中。

二,解题思路:采用卡特兰数方法来解决这题,另外要使用BigInteger来进行操作,而不能使用int数据类型来进行操作
1,这题,要是能想到卡特兰数方法的话,不难的。
2,卡特兰数的公式为:
F(0)=1
F(1)=1
F(2)=2
F(3)=5
F(4)=14
F(5)=42
F(6)=132
F(7)=429
F(8)=1430
F(9)=4820
F(10)=16796
F(11)=58786
F(12)=208012
F(13)=742900
F(14)=2674440
F(15)=9694845
F(16)=35357670
F(17)=129644790

三,用java实现此程序 (已经AC了的)

import java.math.BigInteger;import java.util.Scanner;public class Main{    public static void main(String []args)    {        Scanner scan=new Scanner(System.in);        int n;        BigInteger sum;        while(scan.hasNext())        {            n=scan.nextInt();            BigInteger sum1;            sum1=BigInteger.valueOf(1); //对sum1进行初始化             BigInteger sum2;            sum2=BigInteger.valueOf(1);//对sum2进行初始化            for(int i=n;i>0;i--)            {            sum1=sum1.multiply(BigInteger.valueOf(i));            }            for(int i=2*n;i>n;i--)            {            sum2=sum2.multiply(BigInteger.valueOf(i));            }            sum=sum2.divide(sum1);            BigInteger bit3=new BigInteger(String.valueOf(n+1));            sum=sum.divide(bit3);            System.out.println(sum);        }    }}
1 0
原创粉丝点击