Pagini recente » Cod sursa (job #540193) | Cod sursa (job #3273643) | Cod sursa (job #1506131) | Cod sursa (job #915250) | Cod sursa (job #3278284)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int INF = 1e9; // Valoare mare pentru inițializare
int main() {
ifstream fin("energii.in");
ofstream fout("energii.out");
int G, W;
fin >> G >> W;
vector<int> dp(W + 1, INF); // dp[j] = cost minim pentru energia j
dp[0] = 0; // Costul pentru 0 energie este 0
for (int i = 0; i < G; i++) {
int EGi, CGi;
fin >> EGi >> CGi;
// Parcurgem descrescător pentru a evita suprascrierea valorilor deja folosite
for (int j = W; j >= EGi; j--) {
dp[j] = min(dp[j], dp[j - EGi] + CGi);
}
}
// Găsim costul minim pentru orice valoare ≥ W
int Cmin = *min_element(dp.begin() + W, dp.end());
if (Cmin == INF)
fout << -1 << "\n"; // Nu se poate obține energia cerută
else
fout << Cmin << "\n"; // Cost minim
return 0;
}