Cod sursa(job #2516653)

Utilizator trifangrobertRobert Trifan trifangrobert Data 1 ianuarie 2020 21:16:08
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

const int MOD = 10000;
int N, M, K;

int main()
{
    ifstream fin("diamant.in");
    ofstream fout("diamant.out");
    fin >> N >> M >> K;
    int ADD = (M * (M + 1) / 2) * (N * (N + 1) / 2);
    if (K < -ADD || ADD < K)
    {
        fout << 0 << "\n";
        return 0;
    }
    vector <int> prevdp(2 * ADD + 5, 0);
    vector <int> dp(2 * ADD + 5, 0);
    prevdp[ADD] = 1;
    for (int i = 1;i <= N;++i)
        for (int j = 1;j <= M;++j)
        {
            int cost = i * j;
            for (int p = 0;p <= 2 * ADD;++p)
            {
                dp[p] = 0;
                if (p - cost >= 0)
                    dp[p] += prevdp[p - cost];
                if (p + cost <= 2 * ADD)
                    dp[p] += prevdp[p + cost];
                dp[p] += prevdp[p];
                dp[p] %= MOD;
            }
            swap(dp, prevdp);
        }
    fout << prevdp[K + ADD] << "\n";
    fin.close();
    fout.close();
    return 0;
}