Cod sursa(job #2461237)

Utilizator Ionut28Porumb Palincas Ionut Ionut28 Data 25 septembrie 2019 10:38:28
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("diamant.in");
ofstream fout("diamant.out");
const int mod = 10000;
int n, m, x, dp[2][95000], a[405], v,V = 90000, len, L;
int main()
{
    fin >> n >> m >> x;
    v = n*m*(n + 1)*(m + 1)/4;
    if(abs(x) > v)
        fout << 0 << "\n";
    else
    {
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= m; ++j)
            {
                a[++len] = i*j;
            }
        x = x + 45000;
        L = 0;
        dp[0][V/2] = 1;
        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] %= mod;
            }
        }
        fout << dp[L][x] << "\n";
    }
    return 0;
}