Pagini recente » Cod sursa (job #1844780) | Cod sursa (job #1733137) | Cod sursa (job #749355) | Cod sursa (job #863570) | Cod sursa (job #3250432)
#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;
// }
// }
int x = 1, y = 1;
dp[0][offs] = 1; // 44100 e offsetu de la 0
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]];
dp[1][j] %= mod;
}
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++) swap( dp[0][j], dp[1][j] );
}
// cout << "offset = " << offs << '\n';
out << dp[0][offs + cost] << '\n';
return 0;
}