Pagini recente » Cod sursa (job #2255917) | Cod sursa (job #2724433) | Cod sursa (job #318626) | Cod sursa (job #2757080) | Cod sursa (job #2138444)
#include <bits/stdc++.h>
using namespace std;
int n, m, x;
int dp[2][44104];
int maxim;
vector<int> p;
const int MOD = 10000;
void knapsack() {
for (int i = 1; i <= p.size(); i++) {
for (int j = -maxim; j <= maxim; j++) {
int s = dp[!(i % 2)][maxim + j];
if (maxim + j - p[i - 1] > -(1LL << 31) + 1)
s = (s + 1LL * dp[!(i % 2)][maxim + j - p[i - 1]]) % MOD;
if (maxim + j + p[i - 1] < (1LL << 31) - 1)
s = (s + 1LL * dp[!(i % 2)][maxim + j + p[i - 1]]) % MOD;
dp[i % 2][maxim + 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] = 1;
if (x > maxim || x < -maxim) {
printf("0\n");
return 0;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
p.push_back(i * j);
knapsack();
printf("%d\n", dp[((n * m) % 2)][maxim + x]);
return 0;
}