Cod sursa(job #2539657)

Utilizator xCata02Catalin Brita xCata02 Data 6 februarie 2020 09:33:56
Problema Diamant Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;

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

#define cin fin
#define cout fout

#define MODULO 10000
#define constanta 44500
#define Nmax 401

int curent = 0;

int n, m, desired, Max;
vector < int > vec;

int dp[constanta + 5][2];

void read()
{
    cin >> n >> m >> desired;

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            vec.push_back(i * j);
            Max += i * j;
        }
    }
}

void solve()
{
    if(desired > Max || desired < -Max)
    {
        cout << 0 << endl;
        return;
    }

    dp[constanta][0] = 1;

    for(int k = 0; k < n * m; k++)
    {
        curent = 1 - curent;

        for(int i = -Max + constanta; i <= Max + constanta; i++)
        {
            dp[i][curent]  = dp[i - vec[k]][1 - curent];
            dp[i][curent] += dp[i][1 - curent];
            dp[i][curent] += dp[i + vec[k]][1 - curent];

            dp[i][curent] = dp[i][curent] % MODULO;
        }
    }

    cout << dp[desired + constanta][curent];
}

int main()
{
    read();
    solve();
}