Cod sursa(job #491511)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 11 octombrie 2010 18:06:02
Problema Permutari2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <string>

using namespace std;

#define NM 305
#define MOD 10007

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

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

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