Cod sursa(job #1800771)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 8 noiembrie 2016 02:52:15
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("diamant.in");
ofstream out("diamant.out");
const int mod = 10000;
const int maxx = 44205;
const int maxn = 25;
int v[maxn * maxn];
int dp[2][maxx * 2];
int main()
{
    int n, m, x;
    in >> n >> m >> x;
    int poz = 0;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            v[++poz] = i * j;
    sort(v + 1, v + poz + 1);
    dp[0][maxx] = 1;
    int sum = 0;
    for(int i = 1; i <= poz; i++)
    {
        sum += v[i];
        int p = i % 2;
        for(int s = maxx - sum; s <= maxx + sum; s++)
            dp[p][s] = (dp[1 - p][s - v[i]] + dp[1 - p][s] + dp[1 - p][s + v[i]]) % mod;
    }
    if(x + maxx < 0 || maxx <= x)
    {
        out << 0 << "\n";
        return 0;
    }
    out << dp[(n * m) % 2][maxx + x] << "\n";
    return 0;
}