Pagini recente » Cod sursa (job #3254221) | Cod sursa (job #2785211) | Cod sursa (job #2175073) | Cod sursa (job #2342819) | Cod sursa (job #2139338)
#include <bits/stdc++.h>
using namespace std;
const int MOD = 10000;
const int MAXIM = 2 * 44105;
int n, m, x;
int dp[2][MAXIM + 10];
int obj[MAXIM + 10];
int maxim;
void knapsack() {
int i = 1;
for (int k = 1; k <= n * m; k++, i ^= 1) {
int y = obj[k];
for (int j = 0; j <= MAXIM; j++) {
int s = dp[i ^ 1][j];
if (maxim + j - y >= 0)
s = (s + dp[i ^ 1][j - y]) % MOD;
if (maxim + j + y <= MAXIM)
s = (s + dp[i ^ 1][j + y]) % MOD;
dp[i][j] = s;
}
}
}
int main() {
freopen("diamant.in", "r", stdin);
freopen("diamant.out", "w", stdout);
scanf("%d %d %d ", &n, &m, &x);
maxim = (n * (n + 1) / 2) * (m * (m + 1) / 2);
dp[0][MAXIM / 2] = 1;
if (x > maxim || x < -maxim) {
printf("0\n");
return 0;
}
int p = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
obj[++p] = i * j;
knapsack();
printf("%d\n", dp[((n * m) & 1)][x + MAXIM / 2]);
return 0;
}