Pagini recente » Cod sursa (job #3273189) | Cod sursa (job #2418513) | Cod sursa (job #3281084) | Cod sursa (job #2495293) | Cod sursa (job #2640844)
#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
#include <fstream>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
vector <tuple <int, int, int>> v; // worth, quantity, price
int G, W, best_cost = 100000000;
int main()
{
f >> G >> W;
for(int i = 1; i <= G; ++i)
{
int q, p;
f >> q >> p;
v.push_back(make_tuple(-(q - p), -q, p));
}
sort(v.begin(), v.end());
int actual_value = 0, actual_cost = 0, last = 0;
for(int i = 0; i < G; i++)
{
int c, x, y;
tie(c, x, y) = v[i];
x = -x;
actual_value += x;
actual_cost += y;
if(actual_value >= W)
{
if(best_cost > actual_cost)
best_cost = actual_cost;
while(actual_value > W)
{
tie(c, x, y) = v[last++];
x = -x;
actual_value -= x;
actual_cost -= y;
if(best_cost > actual_cost && actual_value >= W)
best_cost = actual_cost;
}
}
}
if(best_cost == 100000000)
g << -1;
else
g << best_cost;
return 0;
}