Pagini recente » Cod sursa (job #25899) | Cod sursa (job #1599884) | Cod sursa (job #1145426) | Cod sursa (job #1471682) | Cod sursa (job #517533)
Cod sursa(job #517533)
#include <fstream>
#define inf 0x7FffFFff
#define emax 5120
#define gmax 1024
using namespace std;
struct {
int e, c;
} gen[gmax];
unsigned long sol[emax][gmax];
void preprocess(int g, int w)
{
int i;
for (i = 0; i <= w; i++) {
sol[i][0] = inf;
}
for (i = 0; i <= g; i++) {
sol[0][g] = inf;
}
}
void solve(int g, int w)
{
int i, j;
for (i = 1; i <= w; i++) {
for (j = 1; j <= g; j++) {
sol[i][j] = sol[i][j - 1];
if (gen[j].e >= i && gen[j].c < sol[i][j]) {
sol[i][j] = gen[j].c;
} else if (gen[j].e < i && gen[j].c + sol[i - gen[j].e][j - 1] < sol[i][j]) {
sol[i][j] = gen[j].c + sol[i - gen[j].e][j - 1];
}
}
}
}
int main()
{
ifstream fin("energii.in");
ofstream fout("energii.out");
int g, w;
fin >> g >> w;
for (int i = 1; i <= g; i++) {
fin >> gen[i].e >> gen[i].c;
}
preprocess(g, w);
solve(g, w);
if (sol[w][g] == inf) {
fout << -1;
} else {
fout << sol[w][g];
}
fin.close();
fout.close();
}