Cod sursa(job #2878651)

Utilizator tomaionutIDorando tomaionut Data 27 martie 2022 13:59:49
Problema Diamant Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>
#define MOD 1000
using namespace std;

ifstream fin("diamant.in");
ofstream fout("diamant.out");
int n, m, X, dp[2][100000];
int main()
{
    int i, j, x, val, k, ind;
    fin >> n >> m >> X;
    if (abs(X) > n * (n + 1) * m * (m + 1) / 4)
    {
        fout << "0\n";
        return 0;
    }
    val = n * (n + 1) * m * (m + 1) / 4;
    dp[1][val] = ind = 1;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++, ind ^= 1)
        {
            x = i * j;
            for (k = 0; k <= 2 * val; k++)
            {
                dp[ind ^ 1][k] = dp[ind][k];
                if (k + x <= 2 * val) 
                    dp[ind ^ 1][k] += dp[ind][k + x];
                if (k - x >= 0)
                    dp[ind ^ 1][k] += dp[ind][k - x];
                dp[ind ^ 1][k] %= MOD;
            }
        }

    fout << dp[ind][X + val] << "\n";

    return 0;
}