Pagini recente » Cod sursa (job #480625) | Cod sursa (job #2965959) | Cod sursa (job #631141) | Cod sursa (job #1555357) | Cod sursa (job #1257469)
#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 = 99999999,pt=99999999;
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 == 99999999 && pt == 99999999)
{
out << "-1";
}
else
{
out << min( pt ,cost);
}
}