Cod sursa(job #2944475)

Utilizator BiancaMMIVMariciuc Bianca BiancaMMIV Data 22 noiembrie 2022 16:45:47
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;
 ifstream fin("rucsac.in");
 ofstream fout("rucsac.out");

int n, g, w, p;
vector<pair<int, int>> v;

int main(){
    //ifstream f("file.in");

    fin>>n>>g;
    for(int i=1; i<=n; i++)
    {
        fin>>w>>p;
        if(p%w == 0)
            v.push_back(make_pair(p/w, w));
        else
            {
                v.push_back(make_pair((p/w + 1), 1));
                v.push_back(make_pair(p/w, w-1));
            }

    }
    sort(v.begin(), v.end());

    // for(int i=n-1; i>=0; i--)
    //     cout<<v[i].first<<" "<<v[i].second<<endl;
    int i = v.size()-1, greutate = 0, profit  = 0;
    while(i>= 0 || greutate < g) {
        if(greutate + v[i].second > g)
            {
               // cout<<v[i].first<<" - "<< v[i].second<<endl;
                greutate = g;
                profit += (g - greutate)*v[i].first;
            }
        else
        {
            //cout<<v[i].first<<" "<< v[i].second<<endl;
            greutate += v[i].second;
            profit += v[i].second*v[i].first;
        }
        i--;
    }
    fout<<profit;
    return 0;
}