Pagini recente » Cod sursa (job #349700) | Cod sursa (job #1319937) | Cod sursa (job #557024) | Cod sursa (job #232808) | Cod sursa (job #1805832)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
const int NMAX = 20;
const int MMAX = NMAX;
const int MOD = 10000;
int dp[2][100000];
int sz;
int vals[NMAX * MMAX];
int mod[3 * 10000];
int main()
{
ifstream cin("diamant.in");
ofstream cout("diamant.out");
for (int i = 0; i < 10000; ++ i)
mod[i] = i;
for (int i = 10000; i < 30000; ++ i)
mod[i] = mod[i - 10000];
int n, m, x;
cin >> n >> m >> x;
for (int i = 1; i <= n; ++ i)
for (int j = 1; j <= m; ++ j)
vals[++ sz] = i * j;
sort(vals + 1, vals + sz + 1);
dp[0][50000] = 1;
int sum = 0;
for (int i = 1; i <= sz; ++ i) {
memset(dp[i & 1], 0, sizeof(dp[i & 1]));
sum += vals[i];
for (int j = 50000 - sum; j <= 50000 + sum; ++ j)
dp[i & 1][j] = mod[dp[(i & 1) ^ 1][j] + dp[(i & 1) ^ 1][j - vals[i]] + dp[(i & 1) ^ 1][j + vals[i]]];
}
if (x < -45000 || x > 45000)
cout << "0\n";
else
cout << dp[sz & 1][x + 50000];
cin.close();
cout.close();
return 0;
}