Cod sursa(job #2763553)

Utilizator DragosC1Dragos DragosC1 Data 14 iulie 2021 22:05:01
Problema Diamant Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <iostream>
using namespace std;

int n, m, x;
short dp[2][88201];

void read() {
    ifstream f("diamant.in");
    f >> n >> m >> x;
    f.close();
}

int sum = 0;

void solve() {
    int i, j, k;

    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++) 
            sum += i * j;

    x = abs(x);
    if (x > sum)
        return;

    dp[1][sum] = 1;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++) {
            for (k = 0; k <= 2 * sum; k++)
                dp[0][k] = dp[1][k];
            for (k = 0; k <= 2 * sum; k++) {
                if (k >= i * j)
                    dp[1][k] = (dp[1][k] + dp[0][k + i * j] % 10000);
                if (k <= 2 * sum - i * j)
                    dp[1][k] = (dp[1][k] + dp[0][k + i * j] % 10000);   
            }
        }
}

void output() {
    ofstream g("diamant.out");
    g << dp[1][x + sum];
    g.close();
}

int main() {
    read();
    solve();
    output();
    return 0;
}