Pagini recente » Cod sursa (job #2492742) | Cod sursa (job #1692172) | Cod sursa (job #914046) | Cod sursa (job #1101182) | Cod sursa (job #2664602)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cassert>
const int NMAX = 1e3;
const int COST_MAX = 5e3;
int n, target, energySum, costSum;
int e[1 + NMAX], c[1 + NMAX];
int dp[2][1 + NMAX * COST_MAX];
void read() {
std::ifstream in("energii.in");
in >> n >> target;
for (int i = 1; i <= n; ++i) {
in >> e[i] >> c[i];
energySum += e[i];
costSum += c[i];
}
in.close();
}
int main() {
read();
std::ofstream out("energii.out");
if (energySum < target) {
out << "-1\n";
out.close();
return 0;
}
// dp[i][j] = energia maxima cu cost j din primele i generatoare
int lin = 1;
for (int i = 1; i <= n; ++i, lin = 1 - lin) {
for (int j = 1; j <= costSum; ++j) {
dp[lin][j] = dp[1 - lin][j];
if (j >= c[i] && dp[1 - lin][j - c[i]] + e[i] > dp[lin][j])
dp[lin][j] = dp[1 - lin][j - c[i]] + e[i];
}
}
for (int cost = 1; cost <= costSum; ++cost) {
if (dp[1 - lin][cost] >= target) {
out << cost << '\n';
out.close();
return 0;
}
}
assert(true);
out.close();
return 0;
}