Cod sursa(job #1082801)

Utilizator adddyyyBardan Adrian adddyyy Data 14 ianuarie 2014 22:10:25
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>
using namespace std;
ifstream read("rucsac.in");
ofstream write("rucsac.out");
void citire_greutate_si_castig_obiecte(int nrob,int cr,int obiecte[100],int obiecte2[100],int nrdeordine[100])
{
	int i,nrord=1;
	for(i=0;i<2*nrob;i++)
	{
		read>>obiecte[i];
		obiecte2[i]=obiecte[i];
		if(i%2==0)
		{
			nrdeordine[i]=nrord;
			nrord++;
		}
	}
}
void ordonare_obiecte_descrescator_dupa_castig(int nrob,int obiecte2[100],int nrdeordine[100])
{
	int i,aux1,aux2,aux3,ok=0;
	while(ok==0)
	{
		ok=1;
		for(i=0;i<2*nrob;i=i+2)
			if(obiecte2[i+1]<obiecte2[i+3])
			{
				aux1=obiecte2[i+3];
				obiecte2[i+3]=obiecte2[i+1];
				obiecte2[i+1]=aux1;
				aux2=obiecte2[i+2];
				obiecte2[i+2]=obiecte2[i];
				obiecte2[i]=aux2;
				aux3=nrdeordine[i+2];
				nrdeordine[i+2]=nrdeordine[i];
				nrdeordine[i]=aux3;
				ok=0;
			}
	}
}
void afisare_rezultat(int nrob,int obiecte2[100],int nrdeordine[100],int cnrdeordine[100],int cr)
{
	int i,ok=0,k=0,s=0;
	for(i=0;i<2*nrob;i=i+2)
	{
		ok=ok+obiecte2[i];
		if(ok<=cr)
		{
			cnrdeordine[k]=nrdeordine[i];
			s=s+obiecte2[i+1];
			k++;
		}
	}
	write<<s;
}
int main()
{
	int nrob,cr,obiecte[100],obiecte2[100],nrdeordine[100],cnrdeordine[100];
	read>>nrob>>cr;
	citire_greutate_si_castig_obiecte(nrob,cr,obiecte,obiecte2,nrdeordine);
	ordonare_obiecte_descrescator_dupa_castig(nrob,obiecte2,nrdeordine);
	afisare_rezultat(nrob,obiecte2,nrdeordine,cnrdeordine,cr);
	return 0;
}