Cod sursa(job #703212)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 2 martie 2012 11:26:40
Problema Problema rucsacului Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
#include<algorithm>
#define NMAX 10010

using namespace std;

ifstream f("rucsac.in");
ofstream g("rucsac.out");

int n, G, best[NMAX], vz[NMAX];
struct greutate
{
	int x, y;
}a[NMAX];

void Pune(int greutate, int pret, int pz)
{
	int i;
	for (i=0; i<=G; ++i)
		if (vz[i]!=pz && vz[i]) 
			if (i+greutate<=G && best[i]+pret>best[i+greutate])
			{
				vz[i+greutate]=pz;
				best[i+greutate]=best[i]+pret;
			}
}

bool cmp(greutate a, greutate b)
{
	return a.x<b.x;
}

void Citeste()
{
	int x, y, i=1, mx=-1;
	f>>n>>G; best[0]=0; vz[0]=-1;
	for (; i<=G; ++i) best[i]=-1;
	for (i=1; i<=n; ++i) f>>a[i].x>>a[i].y;
	sort(a+1, a+n+1, cmp);
 	for (i=1; i<=n; ++i)
		Pune(a[i].x, a[i].y, i);
	for (i=1; i<=G; ++i)
		if (best[i]>mx) mx=best[i];
	g<<mx<<"\n";
}

int main()
{
	Citeste();
	f.close();
	g.close();
	return 0;
}