Cod sursa(job #3234136)

Utilizator VladimirGVladimir Ghimpau VladimirG Data 6 iunie 2024 17:52:36
Problema Problema rucsacului Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int greutate;
    int profit;
    double ratio;
} Item;

int compare(const void *a, const void *b)
{
    Item *itemA = (Item *)a;
    Item *itemB = (Item *)b;
    if (itemB->ratio > itemA->ratio)
        return 1;
    if (itemB->ratio < itemA->ratio)
        return -1;
    return 0;
}

int main()
{
    FILE *in = fopen("rucsac.in", "r");
    FILE *out = fopen("rucsac.out", "w");
    int N, G;
    fscanf(in, "%d %d", &N, &G);
    Item *items = (Item *)malloc(N * sizeof(Item));
    for (int i = 0; i < N; i++)
    {
        fscanf(in, "%d %d", &items[i].greutate, &items[i].profit);
        items[i].ratio = (double)items[i].profit / items[i].greutate;
    }
    qsort(items, N, sizeof(Item), compare);
    int currentWeight = 0;
    int maxProfit = 0;
    for (int i = 0; i < N; i++)
    {
        if (currentWeight + items[i].greutate <= G)
        {
            currentWeight += items[i].greutate;
            maxProfit += items[i].profit;
        }
    }
    fprintf(out, "%d\n", maxProfit);
    fclose(in);
    fclose(out);
    free(items);
    return 0;
}