Pagini recente » Cod sursa (job #168831) | Cod sursa (job #670044) | Cod sursa (job #2274265) | Cod sursa (job #183573) | Cod sursa (job #3178769)
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e4;
int n, m, x;
vector <vector <int> > dp;
int main()
{
ios_base :: sync_with_stdio(0);
cin.tie(0);
freopen("diamant.in", "r", stdin);
freopen("diamant.out", "w", stdout);
cin >> n >> m >> x;
int maxVal = n * (n + 1) * m * (m + 1) / 4;
// if(abs(x) > maxVal)
// {
// cout << 0;
// return 0;
// }
dp.resize(2, vector <int> (2 * maxVal + 1));
dp[1][maxVal + 1] = 1;
dp[1][maxVal + 0] = 1;
dp[1][maxVal - 1] = 1;
int ind1 = 0, ind2 = 1;
for(int i = 2; i <= n * m; i ++)
{
ind1 = 1 - ind1;
ind2 = 1 - ind2;
for(int j = 0; j <= 2 * maxVal; j ++)
{
dp[ind2][j] = 0;
int lin = (i / m + i % m), col = i % m;
if(!col)
col = m;
int nr = lin * col;
if(j >= nr)
{
dp[ind2][j] += dp[ind1][j - nr];
if(dp[ind2][j] >= mod)
dp[ind2][j] -= mod;
}
if(j + nr <= 2 * maxVal)
{
dp[ind2][j] += dp[ind1][j + nr];
if(dp[ind2][j] >= mod)
dp[ind2][j] -= mod;
}
dp[ind2][j] += dp[ind1][j];
if(dp[ind2][j] >= mod)
dp[ind2][j] -= mod;
}
}
cout << dp[ind2][maxVal + x];
return 0;
}