Cod sursa(job #1208220)

Utilizator Kerriganamihut Kerrigan Data 15 iulie 2014 03:32:24
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
/******************************************************************************************
*           .--.																		  *
* ::\`--._,'.::.`._.--'/::			@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 (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;
}