Cod sursa(job #2533175)

Utilizator ioana_marinescuMarinescu Ioana ioana_marinescu Data 28 ianuarie 2020 20:10:12
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

const int MAX_N = 20;
const int MAX_S = 44100;
const int MOD = 10000;

using namespace std;

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

int dp[MAX_S + 5];

int main() {
    int n, m;
    long long x, sum = 0;
    fin >> n >> m >> x;

    if (x < 0)
        x = -x;

    for (int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            sum += i * j;

    if (x > sum) {
        fout << 0 << '\n';
        return 0;
    }

    if (x == sum) {
        fout << 1 << '\n';
        return 0;
    }

    sum -= x;
    dp[0] = 1;

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            for (int k = sum; k >= i * j; k--) {
                dp[k] += dp[k - i * j];
                if (k >= 2 * i * j)
                    dp[k] += dp[k - 2 * i * j];
                dp[k] %= MOD;
            }

    fout << dp[sum];

    return 0;
}