题目概述
给定N个不同的元素,问有多少种不同的入栈出栈顺序
时限
1000ms/2000ms
输入
每行一个整数N,输入到EOF为止
限制
1<=N<=100
输出
每行一个数,为所求种数
样例输入
1
2
3
10
100
样例输出
1
2
5
16796
896519947090131496687170070074100632420837521538745909320
讨论
数论,卡特兰数,由于只有100个,故采用递推式打表,其公式为
C(x)=1,(x=0)
C(x)=C(x−1)⋅4x−2x+1,(x>0)
不过由于其数字巨大,利用java解决能比较方便
也算是从这里正式开始学习java了吧……好慢
题解状态
249MS,9776K,633 B,Java
题解代码
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
System.setOut(new PrintStream(new FileOutputStream("ij_cout.txt")));
System.setIn(new FileInputStream("ij_cin.txt"));
Scanner cin = new Scanner(new BufferedInputStream(System.in));
BigInteger nums[] = new BigInteger[101];
nums[0] = BigInteger.ONE;
for (int p = 1; p <= 100; p++)
nums[p] = nums[p - 1].multiply(BigInteger.valueOf(4 * p - 2)).divide(BigInteger.valueOf(p + 1));//递推打表
while (cin.hasNext()) {
int a = cin.nextInt();
System.out.println(nums[a]);//这三行是主体
}
}
}
EOF