Cod sursa(job #908995)

Utilizator patratzelAlex Alex patratzel Data 10 martie 2013 13:36:40
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <fstream>
using namespace std;
ifstream r("rucsac.in");
ofstream w("rucsac.out");
unsigned G,N,take,prof;
float raport[5000],pret[5000],greutate[5000];

void quicksort(float raport[], unsigned left, unsigned right)
{
    unsigned i=left, j=right;
    float aux;
    float pivot=raport[(left+right)/2];
    while(i<=j)
        {
            while(raport[i]<pivot)
                i++;
            while(raport[j]>pivot)
                j--;
            if(i<=j)
                {
                    aux=raport[i];
                    raport[i]=raport[j];
                    raport[j]=aux;

                    aux=pret[i];
                    pret[i]=pret[j];
                    pret[j]=aux;

                    aux=greutate[i];
                    greutate[i]=greutate[j];
                    greutate[j]=aux;

                    j--;
                    i++;
                }
        }
        if(left<j)
            quicksort(raport,left,j);
        if(i<right)
            quicksort(raport,i,right);


}

int main()
{
    r>>N;
    r>>G;
    for(unsigned i=1;i<=N;i++)
        {
            r>>greutate[i];
            r>>pret[i];
        }
    for(unsigned i=1;i<=N;i++)
        raport[i]=(float)greutate[i]/pret[i];
    quicksort(raport,1,N);
    for(unsigned i=1;i<=N;i++)
        {
            if((take+greutate[i])<G)
                {
                    take+=greutate[i];
                    prof+=pret[i];
                }

        }

        w<<prof;
        return 0;
}