Pagini recente » Cod sursa (job #1129615) | Cod sursa (job #1630653) | Cod sursa (job #1160637) | Cod sursa (job #1362121) | Cod sursa (job #509838)
Cod sursa(job #509838)
#include <iostream>
#include <fstream>
using namespace std;
int g, w, emax = 0;
struct {
int e;
int c;
int a;
} gen[1024];
long enr[5120];
void restore()
{
for (int i = 1; i <= g; i++) {
gen[i].a = 0;
}
}
long process()
{
int i, j, k;
long cmax = 10000000, erel = 0;
enr[0] = 0;
for (i = 1; i <= w; i++) {
enr[i] = cmax;
if (i <= emax) {
for (j = 1; j <= g; j++) {
if (gen[j].e >= i && gen[j].c < enr[i]) {
enr[i] = gen[j].c;
restore();
gen[j].a = 1;
erel = gen[j].e - i;
}
}
} else {
if (erel >= 0) {
enr[i] = enr[i - 1];
erel--;
} else {
for (j = 1; j <= g; j++) {
if (gen[j].a && (gen[j].c + enr[i - 1]) < enr[i]) {
enr[i] = gen[j].c + enr[i - 1];
erel = erel + gen[j].e;
}
if (erel == -1) {
return -1;
}
}
}
}
}
return enr[w];
}
int main()
{
ifstream fin("energii.in");
fin >> g >> w;
for (int i = 1; i <= g; i++) {
fin >> gen[i].e >> gen[i].c;
gen[i].a = 0;
if (gen[i].e > emax) {
emax = gen[i].e;
}
}
fin.close();
ofstream fout("energii.out");
fout << process();
fout.close();
return 0;
}