Cod sursa(job #425920)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 26 martie 2010 11:45:25
Problema Diamant Scor 100
Compilator cpp Status done
Runda Simulare CNITV 2 Marime 0.66 kb
#include <stdio.h>
#include <string.h>
#define NMAX 25
#define MOD 10000

int m, n, X;
int s[100000], s1[100000];
inline int abs(int x){
	if(x > 0) return x;
	return -x;
}
int main(){
	freopen("diamant.in", "r", stdin);
	freopen("diamant.out", "w", stdout);
	scanf("%d%d%d", &m, &n, &X);
	int max = (n+1)*n*m*(m+1)/4;
	if(X < 0) X *= -1;
	if(X > max){
		printf("0\n");
		return 0;
	}
	s[0] = 1;
	for(int i = 1; i <= m ;++i)
		for(int j = 1; j <= n; ++j){
			for(int k = max ; k >= 0; --k)
				s1[k] = s[abs(k-i*j)] + s[k] + s[k+i*j];
			
		for(int k = 0; k <= max; ++k)
			if(s1[k]) s[k] = s1[k]%MOD, s1[k] = 0;
		}
	printf("%d\n", s[X]%MOD);
}