Pagini recente » Cod sursa (job #3297188) | Cod sursa (job #3298783)
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
typedef struct
{
int weight;
int profit;
}bp;
int compare(const void *a, const void *b)
{
const bp *x = (const bp*)a;
const bp *y = (const bp*)b;
if (x->profit < y->profit) return 1;
if (x->profit > y->profit) return -1;
return 0;
}
int greedy(bp *v,int size,int maxG)
{
int s=0;
qsort(v,size,sizeof(bp),compare);
for(int i=0;i<size;i++)
{
if(maxG>=v[i].weight && maxG>0)
{
maxG-=v[i].weight;
s+=v[i].profit;
}
}
return s;
}
int main(void)
{
bp v[100000]={0};
FILE *fin=fopen("rucsac.in","r");
FILE *fout=fopen("rucsac.out","w");
if(fin==NULL || fout==NULL)
{
fprintf(stderr,"eroare la deschiderea fisierelor");
exit(EXIT_FAILURE);
}
int N,G;
if((fscanf(fin,"%d %d",&N,&G))!=2)
{
fprintf(stderr,"eroare la citirea din fisier");
exit(EXIT_FAILURE);
}
for(int i=0;i<N;i++)
{
if((fscanf(fin,"%d %d",&v[i].weight,&v[i].profit))!=2)
{
fprintf(stderr,"eroare la citirea din fisier");
exit(EXIT_FAILURE);
}
}
int result=greedy(v,N,G);
fprintf(fout,"%d\n",result);
if((fclose(fin))!=0)
{
fprintf(stderr,"eroare la inchdierea fisierului de citire");
exit(EXIT_FAILURE);
}
if((fclose(fout))!=0)
{
fprintf(stderr,"eroare la inchdierea fisierului de scriere");
exit(EXIT_FAILURE);
}
}