Cod sursa(job #3133615)

Utilizator sorynnsorin besleaga sorynn Data 26 mai 2023 13:28:11
Problema Problema rucsacului Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int p, w;
}data;

int cmp_pw(const void *a, const void *b)
{
    data x = *(data*)a, y = *(data*)b;
    if(y.p != x.p)
        return y.p - x.p;
    else return x.w - y.w;
}

void read_data(FILE *in, data *d, int n)
{
    for(int i = 0; i < n; i++)
        fscanf(in, "%d %d", &d[i].w, &d[i].p);
    qsort(d, n, sizeof(data), cmp_pw);
}

int greedy(data *d, int n, int g)
{
    int i = 0, p_fin = 0, g_fin=0;
    while(i != n)
    {
        if(d[i].w + g_fin <= g)
        {
            g_fin += d[i].w;
            p_fin += d[i].p;
        }
        i++;
    }

    return p_fin;
}

int main()
{
    FILE *in = NULL, *out = NULL;
    if((in = fopen("rucsac.in", "r")) == NULL || (out = fopen("rucsac.out", "w")) == NULL)
    {
        fprintf(stderr, "\nFile opening error\n");
        exit(EXIT_FAILURE);
    }
    int n, g;
    fscanf(in, "%d %d", &n, &g);
    data *d = (data*)malloc(sizeof(data)*n);
    read_data(in, d, n);

    fprintf(out, "%d\n", greedy(d, n, g));

    fclose(in);
    fclose(out);
    return 0;
}