Cod sursa(job #508019)

Utilizator raduzerRadu Zernoveanu raduzer Data 7 decembrie 2010 13:02:07
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.77 kb
#include <cstdio>

const int MAX_G = 211;
const int MAX_N = 75011;

int n, s, G;
int f[MAX_G];
int sol[MAX_N], tata[MAX_N];

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

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

	int mx = 0;

	for (i = 1; i <= n; ++i)
	{
		int x;

		scanf("%d", &x);

		++f[x];
		if (x > mx)
			mx = x;
	}

	sol[0] = 1;
	s = 0;

	for (i = mx; i; --i)
		if (f[i])
			for (j = G - i; j >= 0; --j)
				if (sol[j])
					for (l = 1; l <= f[i] && j + l * i <= G && !sol[j + l * i]; ++l)
					{
							sol[j + l * i] = sol[j + (l - 1) * i] + 1;
							tata[j + l * i] = i;
		
							if (j + l * i > s)
								s = j + l * i;
					}

	--sol[s];
	printf("%d %d\n", s, sol[s]);

	for (i = s; i; i -= tata[i])
		printf("%d\n", tata[i]);
}