Cod sursa(job #93220)

Utilizator radamiRadu Patulescu radami Data 18 octombrie 2007 08:33:10
Problema Ghiozdan Scor 54
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>


long obj[20010],n,g,sum[75010],nmin,gmax = 0;

int main ()
{
	long i,j;
	
	freopen ("ghiozdan.in","r",stdin);
	freopen ("ghiozdan.out","w",stdout);
	
	scanf ("%ld",&n);
	scanf ("%ld",&g);
	
	for (i = 1;i <= n; ++i)
		scanf("%ld",&obj[i]);
		
	
/*	for (i = 1; i <= n; ++i)
		printf("%ld ",obj[i]);
*/	
	for (i = 1;i <= g; ++i)
		sum[i] = 2000000000;
	sum[0] = 0;
	
	for (i = 1;i <= n; ++i)
		for (j = g;j >= 0; --j)
			if (sum[j] != 2000000000 && j+obj[i] <= g)
				{
					if (sum[j + obj[i]] > sum[j] + 1)
						sum[j + obj[i]] = sum[j] + 1;
					if (gmax < j + obj[i])
					{
						nmin = sum[j + obj[i]];
						gmax = j + obj[i];
					}
					if (gmax == j + obj[i])
						if (nmin > sum[j + obj[i]])
							nmin = sum[j + obj[i]];
				}					
	
/*	int gasit = 0;
	i = g;
	while (!gasit)
	{
		if (sum[i] != 2000000000)
			gasit = 1;
		else
			i--;
	}
*/	
	printf ("%ld %ld",gmax,nmin);
	return 0;
}