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]);
		}
	}
}

Download