Pagini recente » Cod sursa (job #400375) | Cod sursa (job #2177997) | Cod sursa (job #1961525) | Cod sursa (job #1364366) | Cod sursa (job #1977876)
/**
* Problema poate aprea imposibila, dar observam ca :
* Suma maxima sete 44100 cand n = 20 si m = 20, deci daca x > 44100 rez = 0
*
* Adunam sau scadem fiecare numar.
*
* Time Complexity : O(N*M*S)
*
* COROIAN DAVID, Satu Mare, ROMANIA
**/
#include <cstdio>
#define MOD 10000
using namespace std;
FILE *f, *g;
int dp[2][100009];
const int add = 45000;
int n, m, x;
void readFile()
{
f = fopen("diamant.in", "r");
fscanf(f, "%d%d%d", &n, &m, &x);
fclose(f);
}
int rez;
void solve()
{
int i, j;
int s = 0;
int k;
int ant = 0, cr = 1;
dp[ant][add] = 1;
for(i = 1; i <= n; i ++)
{
for(j = 1; j <= m; j ++)
{
for(k = -s; k <= s; k ++)
{
dp[cr][k - i * j + add] += dp[ant][k + add];
dp[cr][k + add] += dp[ant][k + add];
dp[cr][k + i * j + add] += dp[ant][k + add];
dp[cr][k - i * j + add] %= MOD;
dp[cr][k + add] %= MOD;
dp[cr][k + i * j + add] %= MOD;
}
s += i * j;
for(k = -s; k <= s; k ++)
{
dp[ant][k + add] = dp[cr][k + add];
dp[cr][k + add] = 0;
}
}
}
if(x < -s || x > s)
rez = 0;
else
rez = dp[ant][x + add];
}
void printFile()
{
g = fopen("diamant.out", "w");
fprintf(g, "%d\n", rez);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}