Cod sursa(job #1735791)

Utilizator cubaLuceafarul cuba Data 31 iulie 2016 00:41:42
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("diamant.in");
ofstream g("diamant.out");
const int NMAX = 88203;
const int LIM = 44100;
const int MOD = 10000;
int dp[3][NMAX], cost[403];
int main()
{
    int n , m, x, MaxL, dim;
    f>> n >> m >> x;
    MaxL = 0;
    dim = 0;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++) {
            MaxL += i * j;
            cost[++dim] = i * j;
        }
    }
    if(x > MaxL || x < -MaxL) {
        g<<"0\n";
        return 0;
    }
    dp[0][LIM] = 1;
    int lin = 1;
    for(int i = 1; i <= dim; i++,lin = 1 - lin) {
        for(int j =  -MaxL; j <= MaxL; j++) {
            dp[lin][j + LIM] = dp[1 - lin][j + LIM];
            if(j + LIM + cost[i] <= NMAX)
                dp[lin][j + LIM] += dp[1 - lin][j + LIM + cost[i]];
            if(j + LIM - cost[i] >= 0) {
                dp[lin][j + LIM] += dp[1 - lin][j + LIM - cost[i]];
            }
            dp[lin][j + LIM] %= MOD;
        }
    }
    g<< dp[1 - lin][x + LIM];
    return 0;
}