Cod sursa(job #2555045)

Utilizator Chris.sCristian Chris.s Data 23 februarie 2020 17:17:07
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <limits.h>
#include <algorithm>
#pragma warning(disable:4996)
using namespace std;

class InParser {
private:
	FILE* fin;
	char* buff;
	int sp;
	char read_ch()
	{
		++sp;
		if (sp == 4096)
		{
			sp = 0;
			fread(buff, 1, 4096, fin);
		}
		return buff[sp];
	}
public:
	InParser(const char* nume)
	{
		fin = fopen(nume, "r");
		sp = 4095;
		buff = new char[4096];
	}
	InParser& operator >> (int& n)
	{
		char c;
		while (!isdigit(c = read_ch()));
		n = c - '0';
		while (isdigit(c = read_ch()))
			n = n * 10 + c - '0';
		return *this;
	}
};

InParser fin("energii.in");
ofstream fout("energii.out");

const int WMAX = 5001;
const int MAX = 10005;
int optim[2 * WMAX];
int e, c, n, g, w;

int main()
{
	fin >> g >> w;
	for (int i = 1; i <= 2 * w; ++i)
		optim[i] = MAX;
	while (g--)
	{
		fin >> e >> c;
		for (int i = 2 * w - e; i >= 0; --i)
			optim[i + e] = min(optim[i + e], optim[i] + c);
	}
	int sol = MAX;
	for (int i = w; i <= 2 * w; ++i)
		sol = min(sol, optim[i]);
	if (sol == MAX) sol = -1;
	fout << sol << "\n";
	return 0;
}