Cod sursa(job #1472075)

Utilizator mariakKapros Maria mariak Data 16 august 2015 09:49:48
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#define mod 10000

using namespace std;
int n, m, i, j, x, v[88202], Nmax, k, w[88202];
void read()
{
    freopen("diamant.in", "r", stdin);
    freopen("diamant.out", "w", stdout);
    scanf("%d %d %d", &n, &m, &x);
    for(i = 1; i <= n; ++ i)
        for(j = 1; j <= m; ++ j)
            Nmax += i * j;
    if (x > Nmax || x < -Nmax)
    {
        printf("%d", 0);
        exit(0);
    }
}
void rucsac()
{
    for(i = 1; i <= n; ++ i)
        for(j = 1; j <= m; ++ j)
        {
            memcpy(w, v, sizeof(v));

            for(k = 0; k <= 2 * Nmax; ++ k)
            {
                if ((k + i * j) <= 2 * Nmax)
                    w[k] = (w[k] + v[k + i * j]) % mod;
                if ((k - i * j) >= 0)
                    w[k] = (w[k] + v[k - i * j]) % mod;
            }
            memcpy(v, w, sizeof(w));
        }
}
void write()
{
    printf("%d\n", v[x + Nmax]);
}
int main()
{
    read();
    v[Nmax] = 1;
    rucsac();
    write();
    return 0;
}