Pagini recente » Monitorul de evaluare | Borderou de evaluare (job #2660991) | Cod sursa (job #3340941) | Cod sursa (job #2170899) | Cod sursa (job #3313634)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int dp[2][10005];
// dp[(i % 2)[j] = care este costul maxim pe care il pot lua daca iau obiectul i sau nu
//dp[i % 2][j] = fie iau obiectul i, fie nu-l iau
// il iau: dp[i % 2][j] = dp[(i - 1) % 2][j - v[i].greutate] + v[i].cost
// nu il iau: dp[i % 2][j] = dp[(i - 1) % 2][j];
int main() {
int n, g;
fin >> n >> g;
for (int i = 1; i <= n; i++) {
int greutate, cost;
int curr_i = i % 2;
int last_i = (i - 1) % 2;
fin >> greutate >> cost;
for (int j = 0; j <= g; j++) {
if (j < greutate)
dp[curr_i][j] = dp[last_i][j];
else
dp[curr_i][j] = max(dp[last_i][j - greutate] + cost, dp[last_i][j]);
}
}
int ans = 0;
for (int i = 1; i <= g; i++) {
ans = max(ans, dp[n % 2][i]);
}
fout << ans;
return 0;
}