Cod sursa(job #1107780)

Utilizator raulstoinStoin Raul raulstoin Data 14 februarie 2014 11:45:20
Problema Ghiozdan Scor 44
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
#include<vector>

#define NMAX 205
#define GMAX 75005
#define Min min(j/i,v[i])

using namespace std;

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

struct obiect
{
	int greutate,nr,valmax;
	obiect()
	{
		greutate=nr=valmax=0;
	}
}DP[2][GMAX];

int n,g,v[NMAX];
vector<int> sol;

int main()
{
	fin>>n>>g;
	for(int i=1,x;i<=n;i++)
	{
		fin>>x;
		v[x]++;
	}
	int l=0;
	for(int i=1;i<=200;i++)
	{
		if(!v[i])
			continue;
		for(int j=0;j<=g;j++)
		{
			DP[1-l][j]=DP[l][j];
			if(DP[l][j-Min*i].greutate+Min*i>=DP[1-l][j].greutate)
			{
				DP[1-l][j]=DP[l][j-Min*i];
				DP[1-l][j].greutate+=Min*i;
				DP[1-l][j].nr+=Min;
				DP[1-l][j].valmax=i;
			}
		}
		l=1-l;
	}
	fout<<DP[l][g].greutate<<' '<<DP[l][g].nr<<'\n';
	for(int i=DP[l][g].valmax,val=DP[l][g].greutate;i;i--)
		while(i<=val && v[i]--)
		{
			sol.push_back(i);
			val-=i;
		}
	for(int i=sol.size()-1;i>=0;i--)
		fout<<sol[i]<<'\n';
	return 0;
}