Cod sursa(job #1772256)

Utilizator nnnmmmcioltan alex nnnmmm Data 6 octombrie 2016 16:50:44
Problema Ghiozdan Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<cstdio>
#include<algorithm>
const int GMAX=75001,NMAX=20001;
int d[GMAX],v[NMAX];
int main()
{
 FILE *in=fopen("ghiozdan.in","r");
 int g,n,max=0;
 fscanf(in,"%d %d ",&n,&g);
 for(int i=1;i<=n;i++)
     {
      int x=0;
      fscanf(in,"%d ",&x);
      v[i]=x;
      //d[x]=1;
      for(int j=g-x;j>=0;j--)
          {
           if(d[j]!=0 && d[j]!=NMAX)
              {
               d[j+x]=d[j+x]==0?NMAX:d[j+x];
               d[j+x]=std::min(d[j+x],d[j]+1);
               max=std::max(max,j+x);
              }
          }
      d[x]=1;
     }
 fclose(in);
 FILE *out=fopen("ghiozdan.out","w");
 fprintf(out,"%d %d\n",max,d[max]);
 int c=max;
 while(c!=0)
       {
        for(int i=1;i<=n;i++)
            if(v[i]!=-1 && c-v[i]>=0 && d[c-v[i]]==d[c]-1)
               {
                fprintf(out,"%d\n",v[i]);
                c-=v[i],v[i]=-1;
                break;
               }
       }
 fclose(out);
 return 0;
}