Pagini recente » Cod sursa (job #1607932) | Cod sursa (job #2964949) | Cod sursa (job #2634829) | Cod sursa (job #1894225) | Cod sursa (job #1257460)
#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){ 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 (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)
{
out << "-1";
}
else
{
out << min( pt ,cost);
}
}