Cod sursa(job #1146612)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 19 martie 2014 09:57:12
Problema Diamant Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#define MOD 10000

using namespace std;

int dp[405][45005],Vmax;

inline int Modul(int x)
{
    if(x<0)
        return -x;
    return x;
}

int main()
{
    int L,C,X,i,j,l,c;
    freopen ("diamant.in","r",stdin);
    freopen ("diamant.out","w",stdout);
    scanf("%d%d%d", &L,&C,&X);
    Vmax=C*L*(L+1)*(C+1)/4;
    X=Modul(X);
    if(X>Vmax)
        printf("0\n");
    else
    {
        dp[1][0]=dp[1][1]=1;
        for(i=2;i<=L*C;++i)
            for(j=0;j<=X;++j)
            {
                dp[i][j]=dp[i-1][j];
                l=i/C+1;
                if(i%C==0)
                    --l;
                c=i%C;
                if(!c)
                    c=C;
                dp[i][j]=(dp[i][j]+dp[i-1][Modul(j-l*c)])%MOD;
                dp[i][j]=(dp[i][j]+dp[i-1][j+l*c])%MOD;
            }
        printf("%d\n", dp[L*C][X]);
    }
    return 0;
}