Cod sursa(job #2670081)

Utilizator Tudor06MusatTudor Tudor06 Data 8 noiembrie 2020 22:34:33
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>

using namespace std;

const int NMAX = 20;
const int GMAX = 44100;
const int MOD = 1e4;

int v[NMAX * NMAX + 1];

int dp[2][GMAX + 1];

int modul( int x ) {
    if ( x < 0 )
        x = -x;
    return x;
}
int main() {
    int sum = 0;
    for (int i = 1; i <= 20; i++)
        for (int j = 1; j <= 20; j++)
            sum += i * j;
    cout << sum << endl;

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

    int n, m, x, i, j, s = 0, k = 0;
    fin >> n >> m >> x;
    for ( i = 1; i <= n; i ++ ) {
        for ( j = 1; j <= m; j ++ ) {
            s += i * j;
            v[++k] = i * j;
        }
    }
    if ( x < 0 )
        x = -x;
    if ( s < x ) {
        fout << 0;
        return 0;
    }
    dp[1][v[1]] = 1;
    dp[1][0] = 1;
    for ( i = 2; i <= k; i ++ ) {
        for ( j = 0; j <= GMAX; j ++ ) {
            dp[i % 2][j] = dp[1 - i % 2][j] + dp[1 - i % 2][modul(j - v[i])];
            if (j + v[i] <= GMAX)
                dp[i % 2][j] += dp[1 - i % 2][j + v[i]];
            dp[i % 2][j] %= MOD;
            ///cout << i << ' ' << j << ' '  << dp[i % 2][j] << endl;
        }
    }
    i --;
    fout << dp[i % 2][x];
    return 0;
}