Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/atudoreimiruna | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1208543)
/******************************************************************************************
* .--. *
* ::\`--._,'.::.`._.--'/:: @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;
bool PassPreliminaryTest(vector<float> energy, unsigned int W ){
unsigned int sumTest = 0;
for (int i = 0; i < energy.size(); i++){
sumTest += energy[i];
if (sumTest >= W)
return true;
}
return false;
}
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]);
if (!PassPreliminaryTest(Eg, W)) {
printf("%d", -1);
return 0;
}
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 (maxWeight == (Eg[i] / Cg[i])){
if (Cg[i] <= Cg[i - 1]){
maxWeight = (Eg[i] / Cg[i]);
storePos = i;
}
else{
maxWeight = Eg[i - 1] / Cg[i - 1];
storePos = i - 1;
}
}
else if (maxWeight < (Eg[i] / Cg[i])){
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;
}