Cod sursa(job #18155)

Utilizator witchchiorescu madalina witch Data 18 februarie 2007 10:12:56
Problema Ghiozdan Scor 10
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 0.74 kb
#include<stdio.h>
#include<iostream.h>
int n,g,gmax,a[202],sol[202],nmin,gg,sol1[202];

void back(int gg,int nr)
{int i,j;
for(i=1;i<=g-gg;i++) if(a[i]>0) 
{a[i]--;nr++;sol1[nr]=i;gg=gg+i;
if(g-gg<g-gmax) {gmax=gg;nmin=nr;for(j=1;j<=nmin;j++) sol[j]=sol1[j];}
else if(g-gg==g-gmax&&nr<nmin) {gmax=gg;nmin=nr;for(j=1;j<=nmin;j++) sol[j]=sol1[j];}
else back(gg,nr);nr--;a[i]++;gg=gg-i;}}

int main()
{FILE *f,*g2;
f=fopen("ghiozdan.in","r");
g2=fopen("ghiozdan.out","w");
fscanf(f,"%d%d",&n,&g);int i;
for(i=1;i<=n;i++) {int x;fscanf(f,"%d",&x);a[x]++;}

for(i=g;i>=1;i--) if(a[i]>0) {a[i]--;sol1[1]=i;gg=i;back(gg,1);a[i]++;}

fprintf(g2,"%d %d\n",gmax,nmin);
for(i=nmin;i>=1;i--) fprintf(g2,"%d\n",sol[i]);

fcloseall();return 0;}