Cod sursa(job #18679)

Utilizator damaDamaschin Mihai dama Data 18 februarie 2007 12:57:25
Problema Ghiozdan Scor 80
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 0.94 kb
#include <stdio.h>
#define summax 75210
#define vmax 20010

int v[vmax], s[summax], n, g, gmax, nmin, pos, used[201];

int main()
{
	freopen("ghiozdan.in","r",stdin);
	freopen("ghiozdan.out","w",stdout);

	int i, j, temp;

	scanf("%d%d", &n, &g);

	for(i = 1; i <= n; ++i)
	{
		scanf("%d", &v[i]);
		++used[v[i]];
	}


	for(i = 1; i <= n; ++i)
	{
		for(j = g - v[i]; j > 0; --j)
		{
			if(s[j] && (!s[j + v[i]] || s[j + v[i]] >= s[j] + 1))
			{
				s[j + v[i]] = s[j] + 1;
			}
		}
		s[v[i]] = 1;
	}


	for(i = 1; i <= g; ++i)
	{
		if(s[i])
		{
			if(i > gmax || i == gmax && s[i] >= nmin)
			{
				gmax = i;
				nmin = s[i];
				pos = i;
			}
		}
	}

	printf("%d %d\n", gmax, nmin);


	s[0] = -1;
	for(temp = gmax, j = nmin, i = gmax - 1; i >= 0; --i)
	{
		if(s[i] && s[i] < j && used[temp - i])
		{
			printf("%d\n", temp - i);
			--j;
			--used[temp - i];
			temp = i;
		}
	}

	


	return 0;
}