Cod sursa(job #479976)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 25 august 2010 21:32:20
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>

int n, smax;
int f[202], nr[75002], pred[75002];

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

int main ()
{
	freopen ("ghiozdan.in", "r", stdin);
	freopen ("ghiozdan.out", "w", stdout);
	
	scanf ("%d %d", &n, &smax);
	
	int i, j, k, val, max = 0;
	
	for (i = 1; i <= n; i ++)
	{
		scanf ("%d", &val);
		f[val] ++;
	}
	
	nr[0] = 1;
	for (i = 200; i >= 1; i --)
		if (f[i])
			for (j = smax - i; j >= 0; j --)
				if (nr[j])
					for (k = 1; k <= f[i]; k ++)
						if (j + i * k <= smax && nr[j + i * k] == 0)
						{
							nr[j + i * k] = nr[j + i * (k - 1)] + 1;
							pred[j + i * k] = i;
							max = maxim (max, j + i * k);
						}
						else
							break;
	
	printf ("%d %d\n", max, nr[max] - 1);
	while (max)
	{
		printf ("%d\n", pred[max]);
		max -= pred[max];
	}
	return 0;
}