Cod sursa(job #478463)

Utilizator CezarMocanCezar Mocan CezarMocan Data 18 august 2010 19:39:44
Problema Permutari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>

const int maxN = 310;
const int mod = 10007;

using namespace std;

int N, K;
int fact[maxN];
int A[maxN][maxN];

int main() {
	int i, j, k;
	freopen("permutari2.in", "r", stdin);
	freopen("permutari2.out", "w", stdout);

	scanf("%d%d", &N, &K);

	fact[0] = 1;
	for (i = 1; i <= N; i++)
		fact[i] = fact[i - 1] * i % mod;

	A[1][1] = 1;
	for (i = 1; i <= N; i++) {
		for (k = 1; k < i; k++) {
			for (j = 2; j <= N; j++) {
				A[i][j] = A[i][j] + (A[k][j - 1] * A[i - k][1] % mod);
				if (A[i][j] >= mod)
					A[i][j] -= mod;
			}

		}

		A[i][1] = fact[i];
		for (j = 2; j <= N; j++) {
			A[i][1] -= A[i][j];
			if (A[i][1] < 0)	
				A[i][1] += mod;
		}
	}

	printf("%d\n", A[N][K]);

	return 0;
}