Cod sursa(job #909003)

Utilizator patratzelAlex Alex patratzel Data 10 martie 2013 13:49:42
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 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);
    quicksort(pret,1,N);
    for(unsigned i=1;i<=N;i++)
        {
            if(take+greutate[i]<G)
                {
                    take+=greutate[i];
                    prof+=pret[i];
                }

        }
        w<<prof;


    return 0;
}