Cod sursa(job #974285)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 16 iulie 2013 18:47:11
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>

#define In "diamant.in"
#define Out "diamant.out"
#define Smax 44100
#define MOD 10000

using namespace std;
int Dp[Smax+2], N, M, S;
inline void Read()
{
    ifstream f(In);
    f>>N>>M>>S;
    if(S<0)
        S*=-1;
    f.close();
}

inline void Solve()
{
    int i, j, k = (N*M*(N+1)*(M+1)>>2), Last=0;
    if(S>k)
    {
        S = 0;
        return ;
    }
    S = k - S;
    Dp[0] = 1;
    for(i = 1;i <= N;++i)
        for(j = 1 ;j <= M; ++j)
        {
            for(k = Last;k >= 0; --k)
                if(k+i*j<=S)
                    Dp[k+i*j] = (Dp[k+i*j]+Dp[k])%MOD;
            Last+=i*j;
            for(k = Last;k >= 0; --k)
                if(k+2*i*j<=S)
                    Dp[k+2*i*j] = (Dp[k+2*i*j]+Dp[k])%MOD;
            Last+=2*i*j;
        }
}

inline void Write()
{
    ofstream g(Out);
    g<<Dp[S]<<"\n";
    g.close();
}


int main()
{
    Read();
    Solve();
    Write();
    return 0;
}