Cod sursa(job #3299041)

Utilizator Andronie_RazvanAndronie Razvan Andronie_Razvan Data 4 iunie 2025 02:06:52
Problema Problema rucsacului Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>

int main(void)
{
    FILE *fin=NULL, *fout=NULL;
    fin=fopen("rucsac.in","r");
    fout=fopen("rucsac.out","w");

    int N,G;
    fscanf(fin,"%d %d", &N, &G);
    int greutate[5000], valoare[5000], ord[5000];
    for(int i=0; i<N; i++)
    {
        fscanf(fin,"%d %d",&greutate[i], &valoare[i]);
        ord[i]=i;
    }
    int schimb;
    do
    {
        schimb=0;  
        for(int i=0; i<N-1; i++)
        {
            if(valoare[ord[i]]/greutate[ord[i]]<valoare[ord[i+1]]/greutate[ord[i+1]])
            {
                int aux=ord[i];
                ord[i]=ord[i+1];
                ord[i+1]=aux;
                schimb=1;
            }
        }
    
    
    }while(schimb);

    int capacitate=0, profit=0;
    for(int i=0; i<N && capacitate<=G; i++)
    {
        if((capacitate+greutate[ord[i]])<=G)
        {
            capacitate=capacitate+greutate[ord[i]];
            profit=profit+valoare[ord[i]];
        }
    }

    fprintf(fout,"%d\n", profit);
    fclose(fin);
    fclose(fout);


    return 0;
}