Cod sursa(job #53441)

Utilizator wefgefAndrei Grigorean wefgef Data 22 aprilie 2007 09:32:38
Problema Diamant Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <cstring>

const int mod = 10000;
int n, m, s;
int v[90001], u[90001];
#define v (v+45000)
#define u (u+45000)

void readdata()
{
	freopen("date.in", "r", stdin);
	freopen("date.out", "w", stdout);
	
	scanf("%d %d %d", &n, &m, &s);
}

int solve()
{
	int i, j, k, lim = 0, val;
	
	for (i = 1; i <= n; ++i)
	for (j = 1; j <= m; ++j)
		lim += i*j;
		
	if (lim < s) return 0;
	if (s < -lim) return 0;
	
	v[0] = 1;
	for (i = 1; i <= n; ++i)
	for (j = 1; j <= m; ++j)
	{
		memset(u, 0, sizeof(u));
		val = i*j;
		for (k = lim-val; k >= -lim; --k)
			u[k+val] += v[k];
		for (k = -lim+val; k <= lim; ++k)
			u[k-val] += v[k];
			
		for (k = -lim; k <= lim; ++k)
			v[k] = u[k] % mod;
	}
	return v[s];
}

int main()
{
	readdata();
	printf("%d\n", solve());
	return 0;
}