Cod sursa(job #2715268)

Utilizator IoanaNadIoana Nadia Puiu IoanaNad Data 3 martie 2021 13:54:30
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <vector>
using namespace std;

void readingGenerators(vector<pair<int, int>>& generators, int& G, int& W) {
	ifstream fin("energii.in");
	fin >> G >> W;
	int egi, cgi;
	for (int i = 0; i < G; ++i) {
		fin >> egi >> cgi;
		generators.push_back(pair<int, int>(egi, cgi));
	}
}

int minimumCost(vector<pair<int, int>>& generators, int G, int W) {
	pair<int, int> defaultPair = pair<int, int>(0, 0);
	++W;
	vector<pair<int, int>> temp(W, defaultPair);
	for (int i = 0; i < G; ++i) {
		vector<pair<int, int>> current(W, defaultPair);
		for (int j = 1; j < W; ++j) {
			if (temp[j].first >= j) {
				if (generators[i].first >= j) {
					if (temp[j].second < generators[i].second)
						current[j] = temp[j];
					else
						current[j] = generators[i];
				}
			}
			else {
				if (generators[i].first == j)
					current[j] = generators[i];
				else {
					pair<int, int> newPair = pair<int, int>(temp[j].first + generators[i].first, temp[j].second + generators[i].second);
					current[j] = newPair;
				}
			}
		}
		temp = current;
	}
	if (temp[W - 1].first < W - 1)
		return -1;
	return temp[W - 1].second;
}

int main() {
	int G, W;
	vector<pair<int, int>> generators; 
	readingGenerators(generators, G, W);
	ofstream fout("energii.out");
	fout << minimumCost(generators, G, W);
	return 0;
}