Cod sursa(job #2860578)

Utilizator alexscanteieScanteie Alexandru alexscanteie Data 2 martie 2022 19:57:37
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream cin("rucsac.in");
ofstream cout("rucsac.out");


struct obiect{

    int g,v;
};
int n, gmax;
obiect a[1005];

bool comp(obiect A, obiect B)
{
    return A.v * B.g > A.g * B.v;
}

int main()
{
    cin>>n>>gmax;
    for(int i=1;i<=n;++i)
        cin>>a[i].g>>a[i].v;
    sort(a+1,a+n+1,comp);
    int g = 0 , i = 1;
    double rez = 0;
    while(i <= n)
    {
        if(g + a[i].g <= gmax)
        {
            g += a[i].g;
            rez += a[i].v;
            i ++;
        }
        else if(gmax - g > 0)
            {
                double fractiune = 1.0 * (gmax - g) / a[i].g;
                g = gmax;
                rez += fractiune * a[i].v;
                i++;
            }
            else break;
    }
    cout << rez;
    return 0;
}