Pagini recente » Cod sursa (job #356160) | Cod sursa (job #43523) | Cod sursa (job #609094) | Cod sursa (job #971078) | Cod sursa (job #3234022)
#include <stdio.h>
#include <stdlib.h>
#define INPUT_FILE "rucsac.in"
#define OUTPUT_FILE "rucsac.out"
#define MAX_SIZE 5000
typedef struct {
unsigned int greutate;
unsigned int profit;
int criteriu;
}OBIECT;
int compar(const void *elem1, const void *elem2) {
const OBIECT *c1 = (const OBIECT *)elem1;
const OBIECT *c2 = (const OBIECT *)elem2;
return c2->criteriu - c1->criteriu;
}
void afisare(OBIECT array[], unsigned int size) {
for(unsigned int i=0;i<size;i++) {
printf("%d %d %d\n", array[i].greutate, array[i].profit, array[i].criteriu);
}
}
int main() {
FILE *in = NULL, *out = NULL;
if((in = fopen(INPUT_FILE, "r")) == NULL) {
fprintf(stderr, "Eroare la deschidere fisier\n");
exit(-1);
}
if((out = fopen(OUTPUT_FILE, "w")) == NULL) {
fprintf(stderr, "Eroare la deschidere fisier iesire\n");
exit(-1);
}
OBIECT obiect[MAX_SIZE];
unsigned int n = 0;
unsigned int greutateRucsac = 0, profitMax = 0, greutateMax = 0;
fscanf(in, "%u %u", &n, &greutateRucsac);
for(unsigned int i=0;i<n;i++) {
fscanf(in, "%u %u", &obiect[i].greutate, &obiect[i].profit);
obiect[i].criteriu = obiect[i].profit - obiect[i].greutate;
}
qsort(obiect, n, sizeof(OBIECT), compar);
// afisare(obiect, n);
for(unsigned int i=0;i<n;i++) {
greutateMax += obiect[i].greutate;
if(greutateMax > greutateRucsac) break;
else {
profitMax += obiect[i].profit;
}
}
fprintf(out, "%d", profitMax);
fclose(in);
fclose(out);
return 0;
}