Cod sursa(job #1499326)

Utilizator greenadexIulia Harasim greenadex Data 10 octombrie 2015 15:00:13
Problema Diamant Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define pii pair<int, int>
#define mp make_pair
 
using namespace std;
 
const string name = "diamant",
             in_file = name + ".in",
             out_file = name + ".out";
 
ifstream fin(in_file);
ofstream fout(out_file);
 
const int mod = 1e4;
int MAX, n, m, k, curr, ant, dp[2][100005];

int main() {
	
	fin >> n >> m >> k;
	
	MAX = n * (n + 1) * m * (m + 1) / 4;
	

	if (MAX < k || -MAX > k) {
		fout << 0;
		return 0;
	}

	dp[0][MAX] = 1;

	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			
			curr = 1 - curr;

			for (int sum = 0; sum <= 2 * MAX; sum++) {
				dp[curr][sum] = dp[1 - curr][sum];
				if (sum >= i * j)
					dp[curr][sum] += dp[1 - curr][sum - i * j];
				if (sum + i * j <= 2 * MAX)
					dp[curr][sum] += dp[1 - curr][sum + i * j];
				if (dp[curr][sum] >= mod)
					dp[curr][sum] -= mod;
 			}
 		}

 	fout << dp[curr][k + MAX];

	return 0;
}