Pagini recente » Cod sursa (job #444075) | Cod sursa (job #2378459) | Cod sursa (job #2731195) | Cod sursa (job #909271) | Cod sursa (job #3234136)
#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;
}