Cod sursa(job #2851544)

Utilizator andreimocianAndrei Mocian andreimocian Data 18 februarie 2022 19:55:36
Problema Diamant Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int MOD = 10000, V = 9000;
int n, m, X, len;
int dp[2][95000], a[405];

void solve()
{
    int v;
    v = n * (n + 1) / 2 * m * (m + 1) / 2;
    if (abs(X) > v)
        fout << 0 << "\n";
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            a[++len] = i * j;
        }
    }
    dp[0][V / 2] = 1;
    int L = 0;
    for (int i = 1; i <= len; i++)
    {
        L = 1 - L;
        for (int j = 0; j <= V; j++)
        {
            dp[L][j] = dp[1 - L][j];
            if (j >= a[i])
            {
                dp[L][j] += dp[1 - L][j - a[i]];
            }
            dp[L][j] += dp[1 - L][j + a[i]];
            dp[L][j] = dp[L][j] % MOD;
        }
    }
    X += 4500;
    fout << dp[L][X];
}

int main()
{
    fin >> n >> m >> X;
    solve();
    return 0;
}