Pagini recente » Cod sursa (job #1034589) | Cod sursa (job #1424931) | Istoria paginii runda/contest_7/clasament | Cod sursa (job #387005) | Cod sursa (job #2849966)
#include <fstream>
#include <vector>
using namespace std;
//obj(greutate, valoare)
vector <pair <int, int> > obj;
int rucsac(int n, int g){
vector <vector <int> > dp;
dp.resize(n + 1, vector <int>(g + 1));
for(int i = 0; i <= n; ++i){
for(int j = 0; j <= g; ++j){
if(i == 0 || j == 0){
dp[i][j] = 0;
}
else if(obj[i].first > j){
dp[i][j] = dp[i - 1][j];
//nu luam obiectul
}
else{
int val = obj[i].second;
int greutate = obj[i].first;
dp[i][j] = max(dp[i - 1][j], val + dp[i - 1][j - greutate]);
//maximul dintre optiunea a lua obiectul sau nu
}
}
}
return dp[n][g];
}
int main()
{
ifstream f("rucsac.in");
ofstream g("rucsac.out");
int n, gmax;
f >> n >> gmax;
obj.resize(n + 1);
for(int i = 1; i <= n; ++i){
int w, v;
f >> w >> v;
obj[i] = make_pair(w, v);
}
g << rucsac(n, gmax);
f.close();
g.close();
return 0;
}