Cod sursa(job #1257465)

Utilizator LegionHagiu Stefan Legion Data 7 noiembrie 2014 19:36:12
Problema Energii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
int generat[5002];
int main()
{
	ifstream in("energii.in");
	ofstream out("energii.out");
	int i, j, g, w, cgi, egi, maxim = 0, cost = 999999,pt=9999999;
	in >> g;
	in >> w;
	for (i = 1; i <= g; i++)
	{
		in >> egi;
		in >> cgi;
		if (egi >= 5001 && pt>cgi){ pt = cgi; }
		if (egi > maxim&&egi<5002){ maxim = egi; }
		for (j = maxim; j >= 1; j--)
		{
			if (generat[j] > 0)
			{
				if (j + egi < 5001)
				{
					if (generat[j + egi] > cgi+generat[j]||generat[j + egi] == 0)
					{
						generat[j + egi] = cgi + generat[j];
						if (maxim < j + egi)
						{
							maxim = j + egi;
						}
					}
				}
				else
				{
					if (pt>generat[j] + cgi){ pt = generat[j] + cgi; }
				}
			}
		}
		if (egi<5002&&(generat[egi]>cgi||generat[egi]==0)){ generat[egi] = cgi; }
	}
	for (i = w; i <= maxim; i++)
	{
		if (cost > generat[i] && generat[i] > 0){ cost = generat[i]; }
	}
	if (cost == 999999 && pt == 9999999)
	{
		out << "-1";
	}
	else
	{
		out << min( pt ,cost);
	}
}