Pagini recente » Cod sursa (job #2902293) | Cod sursa (job #1303930) | Cod sursa (job #2451697) | Cod sursa (job #800863) | Cod sursa (job #2799408)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rucsac.in");
ofstream fout ("rucsac.out");
struct obiect{int greutate, profit;};
vector<vector<int>> dp;
vector<obiect> obiecte;
int main(){
int n, gmax, index = 0;
fin >> n >> gmax;
dp = vector<vector<int>>(2, vector<int>(gmax+5005));
obiecte = vector<obiect>(n);
for (int i = 0; i < n; i++, index = 1 - index){
fin >> obiecte[i].greutate >> obiecte[i].profit;
for (int g = 0; g < gmax; g++){
dp[1-index][g] = max(dp[1-index][g], dp[index][g]);
if (g + obiecte[i].greutate <= gmax)
dp[1-index][g + obiecte[i].greutate] = max(dp[1-index][g + obiecte[i].greutate], dp[index][g]+obiecte[i].profit);
}
}
int ans = -1;
for (int g = 0; g <= gmax; g++){
ans = max(ans, dp[index][g]);
}
fout << ans;
return 0;
}