Cod sursa(job #610245)

Utilizator mihai995mihai995 mihai995 Data 26 august 2011 00:08:06
Problema Ghiozdan Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
using namespace std;

const int N=75001,M=20001;
int v[N],a[M],n,g,D=-1;
char PRINT[5*N];

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

void add(int x)
{
    if (x<10)
    {
        PRINT[++D]=x+'0';
        return;
    }
    add(x/10);
    PRINT[++D]=x%10+'0';
}

void scr(int x)
{
	if (!x)
		return;
	for (int i=1;i<=200;i++)
		if (v[x]-1==v[x-i] && a[i])
		{
			a[i]--;
			add(i);
			PRINT[++D]='\n';
			scr(x-i);
			break;
		}
}

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