Cod sursa(job #1194296)

Utilizator denisx304Visan Denis denisx304 Data 3 iunie 2014 14:30:50
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<cstdio>
#include<algorithm>
#include <fstream>
#include <iostream>
#define mod 10000

using namespace std;

int n, m, x, suma, dp[90005], aux[90005];

int main()
{
    ifstream cin("diamant.in");
    ofstream cout("diamant.out");
    cin >> n >> m >> x;
    for (int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
            suma += i * j;
    if (x < -suma || x > suma)
    {
        cout << 0;
        return 0;
    }
    dp[suma + 1] = 1;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
        {
            for (int k = 0; k < 90005; k ++)
                aux[k] = 0;
            for (int k = 1; k <= 2 * suma + 1; k ++)
            {
                if (k - i * j > 0 && dp[k - i * j])
                {
                    aux[k] += dp[k - i * j];
                    if (aux[k] >= mod)
                        aux[k] -= mod;
                }
                if (k + i * j <= 2 * suma + 1 && dp[k + i * j])
                {
                    aux[k] += dp[k + i * j];
                    if (aux[k] >= mod)
                        aux[k] -= mod;
                }
            }
            for (int k = 1; k <= 2 * suma + 1; k ++)
            {
                dp[k] += aux[k];
                if (dp[k] >= mod)
                    dp[k] -= mod;
            }
        }
    cout << dp[suma + 1 + x];
    return 0;
}