Pagini recente » Cod sursa (job #2706637) | Cod sursa (job #3191930) | Cod sursa (job #2286489) | Cod sursa (job #1317512) | Cod sursa (job #3250417)
#include <iostream>
#include <fstream>
#include <vector>
//#include <bits/stdc++.h>
#define in fin
#define out fout
#define mod 10000
using namespace std;
ifstream fin("diamant.in");
ofstream fout("diamant.out");
int dp[801][88201];
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m, x; in >> n >> m >> x;
vector<int> c;
// avem la fiecare 2 cazuri : ignore (0), 1 sau -1
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
c.push_back( (i * j * 1) % mod );
c.push_back( (i * j * (-1)) % mod );
}
}
int offs = (m * (m + 1)) / 2 * (n * (n + 1)) / 2;
c.insert(c.begin(), 0);
// cout << "v : ";
// for(int i = 0; i < v.size(); i++) cout << v[i] << " ";
// cout << '\n';
dp[0][offs] = 1; // 44100 e offsetu de la 0
for(int i = 1; i <= 2 * n * m; i++){
for(int j = 0; j <= offs * 2; j++){
dp[i][j] += dp[i - 1][j];
dp[i][j] %= mod;
if(j - c[i] >= 0 && j - c[i] <= offs * 2 && c[i] > 0) dp[i][j] += dp[i - 1][j - c[i]];
else if(j - c[i] >= 0 && j - c[i] <= offs * 2 && c[i] < 0) dp[i][j] += dp[i - 2][j - c[i]];
dp[i][j] %= mod;
}
}
// cout << "offset = " << offs << '\n';
// cout << dp[8][9] << '\n';
out << dp[n * m * 2][offs + x];
return 0;
}