Cod sursa(job #1107683)

Utilizator raulstoinStoin Raul raulstoin Data 14 februarie 2014 08:33:37
Problema Ghiozdan Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<fstream>
#include<vector>

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

using namespace std;

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

struct obiect
{
	int greutate,nr;
	vector< pair<int,int> > indici;
	obiect()
	{
		greutate=0;
	}
}DP[2][GMAX];

int n,g,solg,soln,v[NMAX],fictiv[NMAX];
//int DP[2][GMAX];

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].indici.push_back(make_pair(Min,i));
			}
		}
		l=1-l;
	}
	fout<<DP[l][g].greutate<<' '<<DP[l][g].nr<<'\n';
	for(size_t i=0;i<DP[l][g].indici.size();i++)
		while(DP[l][g].indici[i].first--)
			fout<<DP[l][g].indici[i].second<<'\n';
	return 0;
}