Cod sursa(job #2528809)

Utilizator MarianConstantinMarian Constantin MarianConstantin Data 22 ianuarie 2020 17:23:09
Problema Diamant Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 405, MAXS = MAXN * MAXN * 20, MOD = 10000;
ifstream fin("diamant.in");
ofstream fout("diamant.out");

int dp1[MAXS], dp2[MAXS], val[MAXN], n, m, k, s, test[MAXN];
#define dp1 (dp1 - 1 + MAXS / 2)
#define dp2 (dp2 - 1 + MAXS / 2)

void preprocess()
{
    s = n * m;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            val[(i - 1) * m + j] = i * j;
}

void solve()
{
    int sum = 1;
    dp1[-1] = dp1[0] = dp1[1] = 1;
    for (int i = 2; i <= s; ++i) {
        for (int j = -sum; j <= sum; ++j)
            dp2[j] = dp1[j];
        sum += val[i];
        for (int j = -sum; j <= sum; ++j)
            dp1[j] = (dp2[j] + dp2[j - val[i]] + dp2[j + val[i]]) % MOD;
    }
}

int main()
{
    fin >> n >> m >> k;
    preprocess();
    solve();
    fout << dp1[k];
    return 0;
}