Pagini recente » Cod sursa (job #179291) | Cod sursa (job #2777939) | Cod sursa (job #189775) | Cod sursa (job #191234) | Cod sursa (job #3294430)
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int N,G;
typedef struct
{
int greutate;
int profit;
}Rucsac;
int cmp(const void *x, const void *y)
{
const Rucsac *p1 = (const Rucsac *)x;
const Rucsac *p2 = (const Rucsac *)y;
if (p1->profit < p2->profit) return 1; // sortare descrescătoare
if (p1->profit > p2->profit) return -1;
return 0;
}
void greedy(Rucsac *v, FILE *fout)
{
int s=0;
qsort(v,N,sizeof(Rucsac),cmp);
for(int i=0;i<N;i++)
{
if(G>=v[i].greutate)
{
G-=v[i].greutate;
s+=v[i].profit;
}
}
fprintf(fout,"%d\n",s);
}
int main(void)
{
Rucsac v[50001]={0};
FILE *fin=fopen("rucsac.in","rt");
if(fin==NULL)
{
perror("eroare la deschiderea fisierului");
exit(-1);
}
FILE *fout=fopen("rucsac.out","wt");
if(fout==NULL)
{
perror("eroare la inchiderea fisierului");
exit(-1);
}
if(fscanf(fin,"%d %d",&N,&G)!=2)
{
perror("datele nu se citesc corect");
exit(-1);
}
for(int i=0;i<N;i++)
fscanf(fin,"%d %d",&v[i].greutate,&v[i].profit);
greedy(v,fout);
return 0;
}