题意:用=和<连接n个数,有多少种方法?
思路:递推方程:F[i][j] = F[i-1][j-1] * j + F[i-1][j] * j;
i个符号分成j个不相同的块。 a < b 为两个不相同的块,a = b 为一个不相同的块。
F[i-1][j-1] 是插入小于号 F[i-1][j]是插入等于号
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
public static void main(String argv[]) {
Scanner cin = new Scanner(System.in);
BigInteger [][] F = new BigInteger[55][55];
BigInteger TMP;
for(int i = 1 ; i <= 50 ; i++) {
for(int j = 1 ; j <= 50 ; j++) {
F[i][j] = BigInteger.ZERO;
}
}
for(int i = 1 ; i <= 50 ; i++) {
F[i][1] = BigInteger.valueOf(1);
}
for(int i = 2 ; i <= 50 ; i++) {
for(int j = 2 ; j <= i ; j++) {
TMP = BigInteger.valueOf(j);
F[i][j] = F[i-1][j-1].add(F[i-1][j]).multiply(TMP);
}
}
for(int i = 1 ; i <= 50 ; i++) {
for(int j = 2 ; j <= i ; j++) {
F[i][1] = F[i][1].add(F[i][j]);
}
}
int T;
int n;
for(T = cin.nextInt() ; T > 0 ; T --) {
n = cin.nextInt();
System.out.println(F[n][1]);
}
}
}