Cod sursa(job #1194320)

Utilizator stanescu.raduRadu Stanescu stanescu.radu Data 3 iunie 2014 15:35:57
Problema Diamant Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Semestrul 2 Marime 0.9 kb
#include <fstream>
#include <iostream>
#define MOD 10000
#define MAX_N 45105

using namespace std;

ifstream f ("diamant.in");
ofstream g ("diamant.out");

int n, m, x, suma;
int cost[405];
int dp[2][2 * MAX_N];

int abs (int x)
{
	if (x > 0) return x;
	return -x;
}

void read ()
{
	f >> n >> m >> x;
	for (int i = 0; i <= 20; i++)
		for (int j = 0; j <= 20; j++
			cost[i * j]
}

void solve ()
{
	suma = (n * (n + 1) * m * (m + 1)) / 2 / 2;
	if (abs(x) > suma)
	{
		g << 0;
		return ;
	}

	dp[0][0] = 1;
	int l = 0;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++, l = 1 - l)
			for (int k = 0; k <= suma; k++)
			{
				dp[1 - l][k] = dp[l][k] + dp[l][k + i * j] + dp[l][abs(k - i * j)]
				if (dp[1 - l][k] >= MOD)
					dp[1 - l][k] -= MOD;
			}
	
	g << dp[1 - l][abs(x)];
	f.close();
	g.close();
}

int main ()
{
	read ();
	solve ();
	return 0;
}