Pagini recente » Cod sursa (job #568637) | Cod sursa (job #668636) | Cod sursa (job #2571188) | Cod sursa (job #1160595) | Cod sursa (job #3133615)
#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;
}