Cod sursa(job #2533439)

Utilizator Alex_BubBuburuzan Alexandru Alex_Bub Data 29 ianuarie 2020 00:00:24
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>

using namespace std;

ifstream fin("diamant.in");
ofstream fout("diamant.out");

const int MOD = 10000, NMax = 20, SMax = 44100;
int N, M, X, Cost[NMax * NMax + 5], ct, DP[2][2  * SMax + 5], oo = 2 * SMax + 2;

int main()
{
    fin >> N >> M >> X;
    X += SMax;

    if(X < 0 || X > 2 * SMax)
    {
        fout << "0\n";
        return 0;
    }

    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M; j++)
            Cost[++ct] = i * j;

    DP[0][SMax] = 1;

    for(int code = 1; code <= ct; code++) {
        int line = (code & 1), linePred = ((code - 1) & 1), cost = Cost[code];

        for(int sum = 0; sum <= 2 * SMax; sum++) {
            DP[line][sum] = DP[linePred][sum];

            if(sum - cost >= 0)
                DP[line][sum] += DP[linePred][sum - cost];

            if(sum + cost <= 2 * SMax)
                DP[line][sum] += DP[linePred][sum + cost];

            DP[line][sum] %= MOD;
        }
    }
    fout << DP[ct & 1][X] << '\n';

    fin.close();
    fout.close();

    return 0;
}