Cod sursa(job #297910)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 5 aprilie 2009 18:21:15
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define Nmax 20011
#define Lmax 75011
#define Inf 1<<!0

int v[Nmax],n,g,s[Lmax],sol[Lmax];

int max(int a, int b)
{
	return a>b?a:b;
}

void read_data()
{
	int i,j;
	freopen("ghiozdan.in","r",stdin);
	freopen("ghiozdan.out","w",stdout);
	
	scanf("%d %d", &n,&g);
	for (i=1;i<=n;++i)
		scanf("%d", &v[i]); 
	//sort(v+1,v+n+1);
	for (i=1;i<=g;++i) 
		s[i]=1<<10;
   int lmax=0,ok;   
	for (i=1;i<=n && s[g]==1<<10;++i)   
    {   
       lmax+=v[i];
	   lmax=max(lmax,g);
       for (j=lmax;j>=v[i];--j)   
            if (s[j]>s[j-v[i]]+1)   
            {   
                s[j]=s[j-v[i]]+1;   
                sol[j]=v[i];   
            }   
    }   
    
    ok=0;   
    i=g;   
    while(!ok)          
    {   
      if (s[i]==Inf) --i;   
      else  
      ok=1;   
    }   
    printf("%d %d\n", i-1,s[i-1]-1);
	g=i-1;
	while(g)
	{
		printf("%d\n", sol[g]);
		g-=sol[g];
	}
}

int main()
{
	read_data();
	//solve();
	//write_data();
	return 0;
}