Pagini recente » Cod sursa (job #492382) | Cod sursa (job #1067853) | Cod sursa (job #1136449) | Cod sursa (job #2030876) | Cod sursa (job #2458846)
#include <bits/stdc++.h>
#define MAX 131072
using namespace std;
const int NMAX = 45000;
const int MOD = 10000;
FILE *IN, *OUT;
int N, M, X, nrMax;
int dp[2][NMAX];
int pos, sign;
char f[MAX];
inline void Read(int &nr){
sign = 0;
nr = 0;
while(f[pos] < '0' || f[pos] > '9'){
if(f[pos] == '-') sign = 1;
pos++;
if(pos == MAX)
fread(f, MAX, 1, IN), pos = 0;
}
while(f[pos] >= '0' && f[pos] <= '9'){
nr = 10 * nr + f[pos++] - '0';
if(pos == MAX)
fread(f, MAX, 1, IN), pos = 0;
}
if(sign) nr =- nr;
}
int main(){
IN = fopen("diamant.in", "r");
freopen("diamant.out", "w", stdout);
Read(N); Read(M); Read(X);
if(X < 0) X *= -1;
if(X > 44100){
printf("0");
return 0;
}
nrMax = 1;
dp[0][0] = 1;
for(int i = 1; i <= N; i++){
for(int j = 1; j <= M; j++){
int cnt = i * j;
int pMax = nrMax;
for(int k = 0; k <= nrMax; k++){
if(cnt >= k)
dp[1][cnt - k] = (dp[1][cnt - k] + dp[0][k]) % MOD;
else dp[1][k - cnt] = (dp[1][k - cnt] + dp[0][k]) % MOD;
dp[1][cnt + k] = (dp[1][cnt + k] + dp[0][k]) % MOD;
if(cnt + k > pMax) pMax = cnt + k;
}
nrMax = pMax;
for(int k = 0; k <= nrMax; k++){
dp[0][k] = (dp[0][k] + dp[1][k]) % MOD;
dp[1][k] = 0;
}
}
}
dp[0][0] = (dp[0][0] * 2) % MOD;
printf("%d", dp[0][X] / 2);
return 0;
}