Pagini recente » Cod sursa (job #1248958) | Cod sursa (job #362563) | Cod sursa (job #29659) | Borderou de evaluare (job #378889) | Cod sursa (job #1995354)
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const int MAGIC = N / 2;
const int MOD = 1e4;
int i, j, n, m, dp[2][N], sum, a[405], nr, row;
long long need;
void add(int row, int to, int from) {
if(to >= N || to < 0) return;
dp[row][to] += dp[1 - row][from];
if(dp[row][to] >= MOD) dp[row][to] -= MOD;
}
int main() {
ifstream cin("diamant.in");
ofstream cout("diamant.out");
ios_base::sync_with_stdio(0);
cin >> n >> m >> need;
for(i = 1; i <= n; ++i)
for(j = 1; j <= m; ++j)
a[++nr] = i * j, sum += a[nr];
if(need > sum) return cout << "0\n", 0;
dp[0][MAGIC] = 1;
for(row = i = 1; i <= nr; ++i, row ^= 1) {
memset(dp[row], 0, sizeof(dp[row]));
for(j = 0; j < N; ++j) {
if(!dp[1 - row][j]) continue;
add(row, j, j);
add(row, j + a[i], j);
add(row, j - a[i], j);
}
}
cout << dp[1 - row][MAGIC + need] << '\n';
return 0;
}