Pagini recente » Cod sursa (job #2634036) | Cod sursa (job #263828) | Cod sursa (job #1245923) | Cod sursa (job #51368) | Cod sursa (job #2684437)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
struct centrala {
int produs;
int cost;
};
void sortare_cresc_cost(int size, centrala generator[]) {
for (int i = 1; i <= size; i++) {
for (int j = i + 1; j <= size; j++) {
if (generator[i].cost > generator[j].cost) {
swap(generator[i].produs, generator[j].produs);
swap(generator[i].cost, generator[j].cost);
}
}
}
}
centrala generator[1001];
int main()
{
int nr_generatoare, energie_necesara;
fin >> nr_generatoare;
fin >> energie_necesara;
int p, c , suma_energie = 0 , cost_minim = 0 , produs_maxim = 0 ;
for (int i = 1; i <= nr_generatoare; i++) {
fin >> p >> c;
generator[i].produs = p;
generator[i].cost = c;
suma_energie = suma_energie + p;
}
if (suma_energie < energie_necesara) {
fout << "-1";
} else {
sortare_cresc_cost(nr_generatoare, generator);
int i = 1, j = i;
produs_maxim = produs_maxim + generator[i].produs;
cost_minim = cost_minim + generator[i].cost;
//cout << cost_minim << "-A " << endl;
if (produs_maxim == energie_necesara) {
fout << generator[i].cost;
}
else {
j++;
while (j<=nr_generatoare) {
produs_maxim = produs_maxim + generator[j].produs;
cost_minim = cost_minim + generator[j].cost;
//cout << cost_minim << "-A " << endl;
if (produs_maxim >= energie_necesara) {
while (produs_maxim >= energie_necesara) {
produs_maxim = produs_maxim - generator[i].produs;
cost_minim = cost_minim - generator[i].cost;
i++;
//cout << cost_minim << "-B " << endl;
}
cost_minim = cost_minim + generator[i-1].cost;
fout << cost_minim;
break;
}
else {
j++;
}
}
}
}
// secventa de cost minim
return 0;
}