Cod sursa(job #549476)
#include<fstream>
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int G,W;
struct generator
{
double eff;
int enprod;
int encost;
};
vector<generator> vect;
bool comp(generator g1, generator g2)
{
return (g1.eff > g2.eff);
}
int main()
{
ifstream fin("energii.in");
fin>>G>>W;
vect.reserve(G);
for(int c = 0; c < G; c++)
{
generator g;
fin>>g.enprod;
fin>>g.encost;
g.eff = (double)g.enprod / (double)g.encost;
vect.push_back(g);
}
fin.close();
sort(vect.begin(), vect.end(), comp);
map<int, int> r;
for(int i = 0; i < G -1 ; i++)
{
int w = W;
int min = 0;
for(int c = i; c < G; c++)
{
if(vect[c].enprod >= w)
{
w = 0;
min += vect[c].encost;
break;
}
else
{
w -= vect[c].enprod;
min += vect[c].encost;
}
}
r[min] = w;
}
int Min = -1;
map<int, int>::iterator it;
for(it = r.begin(); it != r.end(); it++)
if((*it).second == 0)
{Min = (*it).first;break;}
ofstream fout("energii.out");
fout<<Min;
fout.close();
return 0;
}