Cod sursa(job #1499330)

Utilizator greenadexIulia Harasim greenadex Data 10 octombrie 2015 15:09:03
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 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 int mod = 1e4;
int MAX, n, m, k, curr, ant, dp[2][100005];

int main() {

	freopen("diamant.in", "r", stdin);
	freopen("diamant.out", "w", stdout);

	cin >> n >> m >> k;

	MAX = n * (n + 1) * m * (m + 1) / 4;


	if (MAX < k || -MAX > k) {
		cout << 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 (dp[curr][sum] >= mod)
						dp[curr][sum] -= mod;
				}
				if (sum + i * j <= 2 * MAX) {
					dp[curr][sum] += dp[1 - curr][sum + i * j];
					if (dp[curr][sum] >= mod)
						dp[curr][sum] -= mod;
				}
			}
		}

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

	return 0;
}