Pagini recente » Monitorul de evaluare | Cod sursa (job #533893) | Monitorul de evaluare | Cod sursa (job #3307482) | Cod sursa (job #3334151)
#include <iostream>
#include <fstream>
#include <vector>
std::ifstream in("rucsac.in");
std::ofstream out("rucsac.out");
int main() {
int n, g;
in >> n >> g;
std::vector<std::vector<int>> dp(n + 1, std::vector<int>(g + 1, 0));
std::vector<std::pair<int, int>> v(n + 1);
for (int i = 1; i <= n; i++) {
int w, p;
in >> w >> p;
v[i] = {w, p};
}
for (int i = 1; i <= n; i++)
for (int j = 0; j <= g; j++) {
// don't take
dp[i][j] = dp[i - 1][j];
//take
if (j - v[i].first >= 0)
dp[i][j] = std::max(dp[i][j], dp[i - 1][j - v[i].first] + v[i].second);
}
out << dp[n][g] << '\n';
}