Cod sursa(job #1772427)

Utilizator PaulCbnCiobanu Paul PaulCbn Data 6 octombrie 2016 19:04:55
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <cstdio>
#define NMAX 21
#define SMAX 100000
using namespace std;

int N,M,X;
int dp[NMAX*NMAX][SMAX],a[NMAX][NMAX];
int ap[NMAX*NMAX],v[NMAX*NMAX],k;
int Smin,Smax;

void citire()
{
    scanf("%d%d%d",&N,&M,&X);
}

void calcS()
{
    for(int i=1;i<=N;i++)
        for(int j=1;j<=M;j++)
            {
                Smax += i*j;
                v[++k]=i*j;
            }
    Smin = -Smax;

}

void rezolva()
{
    if(X<Smin || X>Smax)
        {
            printf("0\n");
            return;
        }
    int target = X - Smin;

    for(int i=0;i<=k;i++)
        dp[i][0]=1;

    for(int i=1;i<=k;i++)
        for(int j=1;j<=target;j++)
            dp[i][j] = (dp[i-1][j] + dp[i-1][j-v[i]] + dp[i-1][j-2*v[i]])%10000;
    printf("%d\n",dp[k][target]);

}

int main()
{
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);
    citire();
    calcS();
    rezolva();

    return 0;
}