Pagini recente » Istoria paginii utilizator/mateibucur | Cod sursa (job #2759931) | Istoria paginii utilizator/marioltblue | Profil nustiucefac | Cod sursa (job #1783969)
#include <fstream>
#include <vector>
using namespace std;
const int kInfinit = (1 << 30);
int main()
{
ifstream fin("energii.in");
ofstream fout("energii.out");
int n, necesar;
fin >> n >> necesar;
vector<int> cost_min(necesar + 1, kInfinit);
cost_min[0] = 0;
int smax = 0;
while (n--) {
int energie, cost;
fin >> energie >> cost;
for (int i = smax; i >= 0; --i) {
if (cost_min[i] != kInfinit) {
int energie_final = min(i + energie, necesar);
if (cost_min[i] + cost < cost_min[energie_final]) {
cost_min[energie_final] = cost_min[i] + cost;
smax = max(smax, energie_final);
}
}
}
}
if (cost_min.back() == kInfinit)
cost_min.back() = -1;
fout << cost_min.back() << "\n";
return 0;
}