Cod sursa(job #819536)

Utilizator andonemadalin andone Data 19 noiembrie 2012 11:17:43
Problema Problema rucsacului Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream>
using namespace std;
ifstream intrare("rucsac.in");
ofstream iesire("rucsac.out");
int g[10000],c[10000],uz[10000][10000],cmax[10000];
int n,gmax;
void citire()
{
	int i;
	intrare>>n>>gmax;
	for(i=1;i<=n;i++)
		intrare>>g[i]>>c[i];
}
void pd()
{
	int i,G,maxim=-1,x,si=0;
	for(G=1;G<=gmax;G++)
	{
		maxim=-1;si=0;
		for(i=1;i<=n;i++)
		{ 
			if(g[i]<=G && uz[G-g[i]][i]==0)
			{
				x=c[i]+cmax[G-g[i]];
				if(x>maxim)
				{
					si=i;
					maxim=x;
					cmax[G]=x;
				}
			}
		}
		if(si)
		{
			for(i=1;i<=n;i++)
				uz[G][i]=uz[G-g[si]][i];
			uz[G][si]=1;
		}	
	}		
}
void afisare()
{
	int i,si;
	int maxim;
	maxim=cmax[1];
	for(i=2;i<=gmax;i++)
		if(cmax[i]>maxim)
		{
			maxim=cmax[i];
			si=i;
		}
	iesire<<maxim<<'\n';
	/*for(i=1;i<=n;i++)
		if(uz[si][i]==1)
			iesire<<g[i]<<' '<<c[i]<<'\n';*/
}
int main()
{
	citire();
	pd();
	afisare();
	iesire.close();
	return 0;
}