Cod sursa(job #1194169)

Utilizator andreeaghetuUNIBUC andreeaghetu andreeaghetu Data 3 iunie 2014 00:44:27
Problema Diamant Scor 90
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Semestrul 2 Marime 0.8 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int n, m, X, p, q, maxval;
int dp[2][45600];

int abs (int x)
{
    if (x>0)
        return x;
    else
        return x*(-1);
}

int main()
{

    in>>n>>m>>X;
    maxval = (n*(n+1)*m*(m+1))/2/2;

    if (maxval < abs(X))
    {
        cout<<"0\n";
        return 0;
    }

    dp[0][0]=1;
    p=1;
    q=0;
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=m;j++)
        {
            for (int k=0;k<=maxval;k++)
            {
                dp[p][k]=dp[q][k] + dp[q][k+i*j] + dp[q][abs(k-i*j)];
                dp[p][k]%=10000;
            }
            q=p;
            p=1-p;
        }
    }

    out<<dp[q][abs(X)];
    return 0;
}