Cod sursa(job #801178)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 23 octombrie 2012 17:56:15
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<fstream>
using namespace std;
int n,G;
int nr[205],best[75010],pred[75010];

int main()
{
	int i,j,k,x;
	ifstream fin("ghiozdan.in");
	fin>>n>>G;
	for(i=1;i<=n;i++)
	{
		fin>>x;
		nr[x]++;
	}
	fin.close();
	
	best[0]=1; // 1 fictiv pentru a usura implementarea si il scad la final din solutie
	for(i=200;i>0;i--)
	{
		if(nr[i]>0)
		{
			for(j=G-i;j>=0;j--)
			{
				if(best[j]>0)
				{
					for(k=1;k<=nr[i] && j+k*i<=G && best[j+k*i]==0;k++)
					{
						best[j+k*i]=best[j]+k;
						pred[j+k*i]=i;
					}
				}
			}
		}
	}
	
	i=G;
	while(best[i]==0)
		i--;
	ofstream fout("ghiozdan.out");
	fout<<i<<' '<<(best[i]-1)<<"\n";
	while(i)
	{
		fout<<pred[i]<<"\n";
		i-=pred[i];
	}
	fout.close();
	return 0;
}