Cod sursa(job #1445737)

Utilizator akaprosAna Kapros akapros Data 30 mai 2015 22:20:08
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#define Nmax 22
#define Smax 160000
#define mod 10000
using namespace std;
int n, m, x, i, j, k, sum;
int s[Smax * 2 + 5], S[Smax * 2 + 5];
int main()
{
    freopen("diamant.in", "r", stdin);
    freopen("diamant.out", "w", stdout);
    scanf("%d %d %d", &n, &m, &x);
    s[Smax] = 1;  x += Smax;
    if (x >  2 * Smax || x < 0)
    {
        printf("0");
        return 0;
    }
    for (i = 1; i <= n ; ++ i)
    for (j = 1; j <= m ; ++ j)
    {
        memset(S, 0, sizeof(S));

        sum += i * j;
        for (k = sum + Smax - (i * j); k >= 0; -- k)
        if (s[k])
        S[k + (i * j)] = (s[k + (i * j)] + s[k]) % mod;
        for (k = i * j ; k <= sum + Smax; ++ k)
        if (s[k])
        s[k - (i * j)] = (S[k - (i * j)] + s[k]) % mod;
        for (k = 0; k <= sum + Smax; ++ k)
        if (S[k])
        s[k] = S[k] % mod;
    }
    printf("%d", s[x]);
    return 0;
}