Cod sursa(job #2529743)

Utilizator FrostfireMagirescu Tudor Frostfire Data 23 ianuarie 2020 21:43:37
Problema Diamant Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <unordered_map>
#define VAL 44100
#define MOD 10000

using namespace std;

int sum, m, n, x;
unordered_map <int, int> dp, dp1, dp2;

void rucsac(int val)
{   dp1.clear();
    dp2.clear();
    for(int i=sum; i>=-sum; i--) dp1[i] = dp[i-val];
    for(int i=-sum; i<=sum; i++) dp2[i] = dp[i+val];
    for(int i=-sum; i<=sum; i++) dp[i] = (dp[i] + dp1[i] + dp2[i]) % MOD;
}

int main()
{
    ifstream cin("diamant.in");
    ofstream cout("diamant.out");
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m >> x;
    if(x < 0) x = -x;
    if(x > VAL)
        {   cout << 0 << '\n';
            return 0;
        }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++) sum = sum + i * j;
    dp[0] = 1;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            rucsac(i*j);
    cout << dp[x] << '\n';
    return 0;
}