Cod sursa(job #1181062)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 1 mai 2014 18:53:07
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<cstdio>
#include<algorithm>
#include<vector>
#include<bitset>
#include<deque>
#include<queue>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
#include<ctime>
#include<cstdlib>
using namespace std;
const int mod = 10000;
int n,m,x,i,j,k,s,dp[90005],aux[90005];
int main()
{
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);
    scanf("%d%d%d",&n,&m,&x);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            s+=i*j;
    if(x<-s || x>s) {printf("0\n"); return 0;}
    dp[s+1]=1;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {
            memset(aux,0,sizeof(aux));
            for(k=1;k<=2*s+1;k++)
            {
                if(k-i*j>0 && dp[k-i*j])
                {
                    aux[k]+=dp[k-i*j];
                    aux[k]-=(aux[k]>=mod)?mod:0;
                }
                if(k+i*j<=2*s+1 && dp[k+i*j])
                {
                    aux[k]+=dp[k+i*j];
                    aux[k]-=(aux[k]>=mod)?mod:0;
                }
            }
            for(k=1;k<=2*s+1;k++)
            {
                dp[k]+=aux[k];
                dp[k]-=(dp[k]>=mod)?mod:0;
            }
        }
    printf("%d\n",dp[s+1+x]);
    return 0;
}