Pagini recente » Cod sursa (job #3156887) | Cod sursa (job #1371008) | Cod sursa (job #245329) | Cod sursa (job #2951168) | Cod sursa (job #2497576)
#include <fstream>
using namespace std;
int n, gmax, sume[12000], g, val, poz[22000], k, kcop, sume1[12000], maxim;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
bool f[12000];
int main() {
in >> n >> gmax;
for(int i = 1; i <= n; ++i) {
in >> g >> val;
kcop = k;
for(int j = kcop; j >= 1; --j) {
if(g + poz[j] <= gmax) {
int p = g + poz[j];
if(!sume1[p]){
sume1[p] = val + sume[poz[j]];
poz[++k] = p;
}
else {
if(sume1[p] < val + sume[poz[j]])
sume1[p] = val + sume[poz[j]];
}
}
}
if(!f[g]){
poz[++k] = g;
f[g] = 1;
}
if(sume[g] < val)
sume[g] = val;
for(int j = 1; j <= k; ++j){
if(sume[poz[j]] < sume1[poz[j]])
sume[poz[j]] = sume1[poz[j]];
if(sume[poz[j]] > maxim)
maxim = sume[poz[j]];
}
}
out << maxim;
return 0;
}