Cod sursa(job #508016)

Utilizator raduzerRadu Zernoveanu raduzer Data 7 decembrie 2010 12:55:30
Problema Ghiozdan Scor 80
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.74 kb
#include <cstdio>

const int MAX_G = 201;
const int MAX_N = 75001;

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;

	for (i = mx; i; --i)
		for (j = G - i; f[i] && (j + 1); --j)
			for (l = 1; sol[j] && l <= f[i] && j + l * i <= G; ++l)
				if (!sol[j + l * i])
				{
					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]);
}