Cod sursa(job #491469)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 11 octombrie 2010 14:42:44
Problema Permutari2 Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <iostream>
#include <string>

using namespace std;

#define NM 305
#define MOD 10007

int DIN[NM][NM], perms[NM];

int main()
{
	int N = 300, K;
	
	freopen ("permutari2.in", "r", stdin);
	freopen ("permutari2.out", "w", stdout);
	
	perms[0] = 1;
	
	for (int i = 1; i <= N; ++i) perms[i] = (perms[i - 1] * i) % MOD;
	
	DIN[0][0] = 1;
	
	scanf ("%d %d", &N, &K);
	
	for (int i = 1; i <= N; ++i)
	{	
		for (int j = 1; j <= i; ++j)
			for (int k = 0; k < i; ++k)
				DIN[i][j] = (DIN[i][j] + DIN[i - k][j - 1] * DIN[k][1]) % MOD;
			
		DIN[i][1] = perms[i];

		for (int j = 2; j <= i; ++j) DIN[i][1] = (DIN[i][1] + MOD - DIN[i][j]) % MOD;
	}
	
	printf ("%d", DIN[N][K]);
	
	return 0;
}