Pagini recente » Cod sursa (job #1871509) | Cod sursa (job #2179080) | Cod sursa (job #1392231) | Cod sursa (job #2869140) | Cod sursa (job #3250433)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
//#include <bits/stdc++.h>
#define in fin
#define out fout
#define mod 10000
#define ll long long
using namespace std;
ifstream fin("diamant.in");
ofstream fout("diamant.out");
ll dp[2][88402];
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll n, m, cost; in >> n >> m >> cost;
// avem la fiecare 3 cazuri : ignore (0), 1 sau -1
vector<int> v;
ll offs = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
v.push_back( i * j );
offs += i * j;
}
}
sort(v.begin(), v.end());
// if(abs(cost) > offs){
// out << '0\n';
// return 0;
// }
// c.insert(c.begin(), 0);
// cout << "v : ";
// for(int i = 0; i < v.size(); i++) cout << v[i] << " ";
// cout << '\n';
// for(int i = 0; i <= n * m * 2; i++){
// for(int j = 0; j <= offs * 2; j++){
// dp[i][j] = 0;
// }
// }
if(cost < offs * (-1) || offs < cost){
out << "0\n";
return 0;
}
dp[0][offs] = 1; // 44100 e offsetu de la 0 pt caz maxim
dp[0][offs - 1] = 1;
dp[0][offs + 1] = 1;
// e -1/+1 pt ca primul e 1
for(int i = 1; i < v.size(); i++){
for(int j = 0; j <= offs * 2 + 1; j++){
dp[1][j] += dp[0][j];
if(j - v[i] >= 0){
dp[1][j] += dp[0][j - v[i]];
}
if(j + v[i] <= offs * 2 + 1){
dp[1][j] += dp[0][j + v[i]];
}
dp[1][j] %= mod;
}
for(int j = 0; j <= offs * 2 + 1; j++){
int aux = dp[1][j];
dp[0][j] = aux;
dp[1][j] = 0;
// refresh
}
}
// cout << "offset = " << offs << '\n';
out << dp[0][offs + cost] << '\n';
return 0;
}