Pagini recente » Cod sursa (job #1332661) | Cod sursa (job #1208209)
/******************************************************************************************
* .--. *
* ::\`--._,'.::.`._.--'/:: @author Ana M. Mihut @course InfoArena Tryout *
* ::::. ` __::__ ' .::::: @alias LT-Kerrigan @date 08.07.2014 *
* ::::::-:.`'..`'.:-:::::: @link http://infoarena.ro/problema/energii *
* ::::::::\ `--' /:::::::: @detail *
* *
*******************************************************************************************/
#include <iostream>
#include <fstream>
#include <vector>
#include <stdio.h>
using namespace std;
unsigned int G;
unsigned int W;
int main(){
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
scanf("%d", &G);
vector<float> Eg(G);
vector<float> Cg(G);
vector<unsigned int> weights(G);
scanf("%d", &W);
for (int i = 0; i < G; i++)
scanf("%f %f", &Eg[i], &Cg[i]);
int countE = 0;
int minCost = 0;
while (countE < W && Eg.size() > 0 && Cg.size() > 0){
double maxWeight = 0;
int storePos = 0;
for (int i = 0; i < Eg.size(); i++){
if ((double)(Eg[i] / Cg[i]) >= maxWeight){
maxWeight = Eg[i] / Cg[i];
storePos = i;
}
}
minCost += Cg[storePos];
countE += Eg[storePos];
Cg.erase(Cg.begin() + storePos);
Eg.erase(Eg.begin() + storePos);
}
if (countE >= W)
printf("%d", minCost);
else printf("%d", -1);
return 0;
}