Cod sursa(job #1567856)

Utilizator Vali_DeaconuVali Deaconu Vali_Deaconu Data 13 ianuarie 2016 19:44:44
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<cstdio>
using namespace std;
void file_init() {
    if (freopen("rucsac.in", "r", stdin)) ;
    if (freopen("rucsac.out", "w", stdout)) ;
}
void file_close() {
    fclose(stdin);
    fclose(stdout);
}
struct obiect { int w, p; };
obiect x[5005];
int N, G, T;
void quicksort(int inf, int sup) {
    int i = inf,
        j = sup,
        mid = x[(i + j) / 2].p;
    do {
        while ((i < sup) && (x[i].p > mid)) ++i;
        while ((j > inf) && (x[j].p < mid)) --j;

        if (i<=j) {
            obiect aux = x[i];
            x[i] = x[j];
            x[j] = aux;
            ++i, --j;
        }
    } while (i<=j);
    if (inf < j) quicksort(inf, j);
    if (sup > i) quicksort(i, sup);
}
int main() {
    file_init();
    if (scanf ("%d %d", &N, &G)) ;
    for (int i=1; i<=N; ++i)
        if (scanf ("%d %d", &x[i].w, &x[i].p)) ;
    quicksort(1, N);
    for (int i=1; ((i<=N)&&(x[i].w <= G)); ++i) {
        G -= x[i].w;
        T += x[i].p;
    }
    printf ("%d", T);
    file_close();
    return 0;
}