Cod sursa(job #631602)

Utilizator lucian666Vasilut Lucian lucian666 Data 8 noiembrie 2011 20:50:19
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
using namespace std;
ofstream fout("rucsac.out");
int W[5010],g,n,P[5010];
void quick(int st,int dr);
void afis();
void citire();
void rez();
int main()
{
	citire();
	quick(1,n);
	rez();
	fout<<endl;
	afis();
	return 0;
}
void quick(int st,int dr)
{
	if(st<dr)
	{
		int i=st,j=dr,d=0;
		while(i<j)
		{
			if(P[i]<P[j])
			{
				int aux1=P[i];
				P[i]=P[j];
				P[j]=aux1;
				int aux2=W[i];
				W[i]=W[j];
				W[j]=aux2;
			d=1-d;
			}
			if(d==0)
				j--;
			else
				i++;
		}
		quick(st,i-1);
		quick(i+1,dr);
	}
}
void afis()
{
	for(int i=1;i<=n;i++)
		fout<<W[i]<<" "<<P[i]<<" "<<endl;
}
void citire()
{
	ifstream fin("rucsac.in");
	fin>>n>>g;
	for(int i=1;i<=n;i++)
		fin>>W[i]>>P[i];
}
void rez()
{
	int s=0;
	int gg=g;
	for(int i=1;i<=n&&gg;i++)
		if(W[i]<=gg)
		{
			s+=P[i];
			gg-=W[i];
		}
		fout<<s;
}