Cod sursa(job #977798)

Utilizator andrei.sfrentSfrent Andrei andrei.sfrent Data 26 iulie 2013 17:23:35
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fi("rucsac.in");
ofstream fo("rucsac.out");

struct O {
  O(int w, int p) : w(w), p(p) {}
  int w, p;
};

int N, W;
vector<O> objs;

void read() {
  fi >> N >> W;
  for(int i = 0; i < N; i++) {
    int w, p;
    fi >> w >> p;
    objs.push_back(O(w, p));
  }
}

#define MAXG 10000

void solve() {
  int *last = new int[MAXG + 1];
  int *current = new int[MAXG + 1];

  for(int i = 0; i < MAXG; i++) current[i] = 0;

  for(int i = 0; i < N; i++) {
    swap(current, last);
    int w = objs[i].w, p = objs[i].p;
    for(int g = 0; g <= W; g++) {
      current[g] = last[g];
      if(g - w >= 0 && current[g] < last[g - w] + p) {
        current[g] = last[g - w] + p;
      }
    }
  }

  fo << current[W] << endl;

  delete[] last;
  delete[] current;
}

int main(int argc, char *argv[]) {
  read();
  solve();
  return 0;
}