Cod sursa(job #2529678)

Utilizator FrostfireMagirescu Tudor Frostfire Data 23 ianuarie 2020 19:59:31
Problema Diamant Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define VAL 44100
#define MOD 10000

using namespace std;

ifstream f("diamant.in");
ofstream g("diamant.out");

int n, m, x, dp[VAL+10], dp1[VAL+10], dp2[VAL+10];

void rucsac(int nr)
{   memset(dp1, 0, sizeof(dp1));
    memset(dp2, 0, sizeof(dp2));

    for(int i=x; i>=nr; i--) dp1[i] = (dp[i-nr] + dp[i]) % MOD;
    for(int i=0; i<=x-nr; i++) dp2[i] = (dp[i+nr] + dp[i]) % MOD;
    for(int i=0; i<=x; i++) dp[i] = (dp1[i] + dp2[i]) % MOD;
}

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