Cod sursa(job #2698791)

Utilizator Teodor94Teodor Plop Teodor94 Data 23 ianuarie 2021 00:44:43
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <stdio.h>

#define MAX_N 100
#define MAX_G 100

inline int max(int a, int b) {
  return a > b ? a : b;
}

struct Produs {
  int greutate, valoare;
};

Produs v[MAX_N + 1];
int d[2][MAX_G];

int main() {
  FILE *fin, *fout;
  int n, g, i, j;

  fin = fopen("rucsac.in", "r");
  fscanf(fin, "%d%d", &n, &g);
  for (i = 1; i <= n; ++i)
    fscanf(fin, "%d%d", &v[i].greutate, &v[i].valoare);
  fclose(fin);

  for (i = 1; i <= n; ++i)
    for (j = 0; j <= g; ++j) {
      d[i & 1][j] = d[(i - 1) & 1][j];

      if (v[i].greutate <= j)
        d[i & 1][j] = max(d[(i - 1) & 1][j], d[(i - 1) & 1][j - v[i].greutate] + v[i].valoare);
    }

  fout = fopen("rucsac.out", "w");
  fprintf(fout, "%d\n", d[n & 1][g]);
  fclose(fout);

  return 0;
}