Cod sursa(job #916751)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 16 martie 2013 20:51:16
Problema Permutari2 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<stdio.h>

#define maxn 305
#define mod 10007

FILE*f=fopen("permutari2.in","r");
FILE*g=fopen("permutari2.out","w");

int n,k;
int D[maxn][maxn],F[maxn];

int main () {
	
	fscanf(f,"%d %d",&n,&k);
	
	F[0] = 1;
	for ( int i = 1 ; i <= n ; ++i ){
		F[i] = (1LL*F[i-1]*i)%mod;
	}
	
	D[1][1] = 1;
	for ( int i = 2 ; i <= n ; ++i ){
		
		int total = 0;
		for ( int j = 2 ; j <= i ; ++j ){
			
			for ( int p = j-1 ; p <= i-1 ; ++p ){
				D[i][j] = (D[i][j] + 1LL*D[p][j-1]*D[i-p][1])%mod;
			}
			total += D[i][j]; if ( total >= mod )	total -= mod;
		}
		
		D[i][1] = F[i]-total; if ( D[i][1] < 0 )	D[i][1] += mod;
	}
	
	fprintf(g,"%d\n",D[n][k]);
	
	fclose(f);
	fclose(g);
	
	return 0;
}