Cod sursa(job #1166221)

Utilizator barabasi_csongorBarabasi Csongor barabasi_csongor Data 3 aprilie 2014 12:58:58
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>

using namespace std;

struct elev{int gr,va;}t[5003];

void quick(int st,int dr)
{
    int i=st,j=dr;
    int pivot=t[(st+dr)/2].va;
    elev aux;
    do
        {
            while(t[i].va<pivot) i++;
            while(t[j].va>pivot) j--;
            if(i<=j)
                {
                    aux=t[i];
                    t[i]=t[j];
                    t[j]=aux;i++;j--;
                }
        }while(i<=j);

    if(i<dr) quick(i,dr);
    if(j>st) quick(st,j);
}

int main()
{freopen("rucsac.in","r",stdin);
freopen("rucsac.out","w",stdout);
int n,g;
scanf("%d%d",&n,&g);
int ng=0;
for(int i=1;i<=n;i++) scanf("%d%d",&t[i].gr,&t[i].va);
quick(1,n);
int poz=n,val=0;
while(ng<g)
    {
        if(ng+t[poz].gr<=g)
            {
                ng=ng+t[poz].gr;
                val+=t[poz].va;
            }
        poz--;
    }
printf("%d",val);
}