Cod sursa(job #46919)

Utilizator razvi9Jurca Razvan razvi9 Data 3 aprilie 2007 10:55:08
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<stdio.h>
#include<string.h>
#define max(a,b) a<b?b:a
int n,m,a[50000],b[50000],i,j,X,k,y,x,xmax;
int main()
{freopen("diamant.in","r",stdin);
 freopen("diamant.out","w",stdout);
 scanf("%d %d %d",&n,&m,&X);
 X=X>0?X:-X;
 for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
   k=k+i*j;
 if(k<X) {printf("0");fclose(stdout);return 0;}
 if(k==X){printf("1");fclose(stdout);return 0;}
 a[0]=1;
 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
  {y=i*j;x=xmax;
   memcpy(b,a,sizeof(a));
   for(k=xmax;k>=0;k--)
    if(b[k]){ a[k+y]+=b[k];x=max(x,k+y);}
   for(k=1;k<=y;k++) if(b[k]) a[y-k]+=b[k];
   for(k=y;k<=xmax;k++) if(b[k]) a[k-y]+=b[k];
   xmax=x;}
 printf("%d",a[X]);
 fclose(stdout);
 return 0;}