Cod sursa(job #1424555)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 24 aprilie 2015 21:31:01
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <stdio.h>

#define max(a, b) ((a) > (b) ? (a) : (b))
#define MAX_WEIGHT 10000

int d[2][MAX_WEIGHT + 1];

int main(void) {
  FILE *f;
  int n, maxWeight;
  int w, p;

  f = fopen("rucsac.in", "r");
  fscanf(f, "%d%d", &n, &maxWeight);
  for (int i = 0; i < n; i++) {
    fscanf(f, "%d%d", &w, &p);
    for (int j = 1; j <= maxWeight; j++) {
      if (j >= w) {
        d[i & 1][j] = max(d[!(i & 1)][j], d[!(i & 1)][j - w] + p);
      } else {
        d[i & 1][j] = d[!(i & 1)][j];
      }
    }
  }
  fclose(f);

  f = fopen("rucsac.out", "w");
  fprintf(f, "%d\n", d[!(n & 1)][maxWeight]);
  fclose(f);
  return 0;
}