Cod sursa(job #2137527)

Utilizator dragomirmanuelDragomir Manuel dragomirmanuel Data 20 februarie 2018 20:54:42
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int mod = 10000;
const int clc = 88200;
int N, M, k, X;
int v[405];
int dr[2][clc+5];


int main()
{
    fin >> N >> M >> X;

    for(int i=1; i<=N; ++i)
        for(int j=1; j<=M; ++j)
        {
            v[++k] = i*j;
        }

    int x = N*(N+1)/2;
    int y = M*(M+1)/2;

    if(X>x*y)
    {
        cout << 0;
        return 0;
    }
    int l = 1;

    dr[0][clc/2]=1;
    for(int i=1; i<=N*M; ++i)
    {
        for(int j=0; j<=clc; ++j)
        {
            dr[l][j] = dr[1-l][j]+ dr[l][j];

            if(j - v[i] >=0 )
                dr[l][j] += dr[1-l][j-v[i]];

            if(j+ v[i] <= clc)
                dr[l][j] += dr[1-l][j+v[i]];

            dr[l][j]= dr[l][j]%mod;
        }

        for(int j=0; j<=clc; ++j)
        {
            dr[1-l][j] = 0;
        }

        l=1-l;
    }

    fout << dr[1-l][X+clc/2]%mod;
    return 0;
}