BCDIV - Chia nhóm
Tác giả: khuc_tuan
Ngôn ngữ: Java
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numtest = sc.nextInt();
BigInteger[][] f = new BigInteger[26][26];
int[][] C = new int[26][26];
for (int i = 0; i < C.length; ++i)
for (int j = i; j < C[i].length; ++j) {
if (i == 0)
C[i][j] = 1;
else
C[i][j] = C[i][j - 1] + C[i - 1][j - 1];
}
for (int i = 0; i < f.length; ++i)
for (int j = 0; j < f[i].length; ++j)
f[i][j] = BigInteger.ZERO;
for (int i = 1; i < f.length; ++i)
for (int j = 1; j < f[i].length; ++j)
if (i >= j) {
if (j == 1)
f[i][j] = BigInteger.ONE;
else {
for (int s = 1; s <= i; ++s)
if (i - s >= j - 1) {
f[i][j] = f[i][j].add(f[i - s][j - 1]
.multiply(BigInteger
.valueOf(C[s - 1][i - 1])));
}
}
}
for (int test = 1; test <= numtest; ++test) {
int n = sc.nextInt();
int k = sc.nextInt();
System.out.println(f[n][k]);
}
}
}