Cod sursa(job #470274)

Utilizator mihai995mihai995 mihai995 Data 12 iulie 2010 17:54:10
Problema Ghiozdan Scor 58
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <fstream>
using namespace std;

int v[1<<17],a[1<<16],n,g;
bool use[1<<16];

ifstream in("ghiozdan.in");
ofstream out("ghiozdan.out");

void scr(int x)
{
	if (!x)
		return;
	for (int i=n;i;i--)
		if (v[x]-1==v[x-a[i]] && !use[i])
		{
			use[i]=true;
			scr(x-a[i]);
			out<<a[i]<<"\n";
			break;
		}
}

int main()
{
	int i,j;
	in>>n>>g;
	for (i=1;i<=n;i++)
		in>>a[i];
	sort(a+1,a+n+1);
	v[0]=1;
	for (i=n;i;i--)
		for (j=g-a[i];j>=0;j--)
			if (v[j] && (v[j+a[i]]>v[j]+1 || !v[j+a[i]]))
				v[j+a[i]]=v[j]+1;
	for (i=g;i;i--)
		if (v[i])
			break;
	out<<i<<" "<<v[i]-1<<"\n";
	scr(i);
	return 0;
}