Cod sursa(job #2762504)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 7 iulie 2021 20:06:32
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

ifstream f ( "diamant.in" );
ofstream g ( "diamant.out" );
const int NMAX = 21, INF = 44100, MOD = 10000;
int dp[2][2 * INF + 100];
int main()
{
    int N, M, X;
    f >> N >> M >> X;
    int smax = 0;
    X = abs ( X );

    for ( int i = 1; i <= N; i++ )
        for ( int j = 1; j <= M; j++ )
            smax += i * j;

    if ( X > smax )
    {
        g << 0;
        return 0;
    }

    dp[1][smax] = 1;

    for ( int i = 1; i <= N; i++ )
        for ( int j = 1; j <= M; j++ )
        {
            for ( int k = 0; k <= 2 * smax; k++ )
                dp[0][k] = dp[1][k];

            for ( int k = 0; k <= 2 * smax; k++ )
            {
                if ( k + i * j <= 2 * smax )
                    dp[1][k] += dp[0][k + i * j];

                if ( k - i * j >= 0 )
                    dp[1][k] += dp[0][k - i * j];

                dp[1][k] %= MOD;
            }
        }

    g << dp[1][X + smax];
    return 0;
}