Cod sursa(job #297885)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 5 aprilie 2009 17:55:07
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>

using namespace std;

#define Nmax 20011
#define Lmax 200
#define Inf 0x3f3f3f3f

int v[Nmax],n,frecv[Lmax+1],gmax,suma,lmax,g,nr,s[4*Nmax];

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

inline int min(int a, int b)
{
	return a<b?a:b;
}

void read_data()
{
	int i;
	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]); 
		lmax=max(lmax,v[i]);
		frecv[v[i]]++;
	}
}

void solve()
{
	int ok,i,j;
	gmax=g;
	nr=0;
	s[0]=0;
	for (i=1;i<=g;++i)
		 s[i]=Inf;
	for (i=1;i<=n;++i)
		for (j=g;j>=1;--j)
            if (s[j]!=Inf) 
			if (s[j+v[i]]>s[j]+1)
  			    s[j+v[i]]=s[j]+1;
	ok=0;
	i=g;
	while(!ok)		 
    {
	  if (s[i]==Inf) --i;
	  else
		  ok=1;
	}
	gmax=i;
	nr=s[i];
}


void write_data()
{
	int i,j;
	printf("%d %d\n", gmax,nr);
	/*for (i=1;i<=nr;++i)
		 printf("%d\n", sol[i]);*/
}

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