Cod sursa(job #3154674)

Utilizator Alex_HossuHossu Alexandru Alex_Hossu Data 5 octombrie 2023 16:46:19
Problema Problema rucsacului Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>

#define MAX_G 10001

int d[MAX_G];

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

int main() {
  FILE *fin, *fout;
  int n, g;
  int w, p;
  int m, i;
  int lim;
  int maxVal;

  fin = fopen("rucsac.in", "r");

  fscanf(fin, "%d%d", &n, &g);
  lim = 0;

  for (m = 0; m < n; m++) {
    fscanf(fin, "%d%d", &w, &p);
    lim = max(lim + w, g);
    for (i = lim; i > w; i--) {
      if (d[i - w] != 0 && d[i] < d[i - w] + p)
        d[i] = d[i - w] + p;
    }
    if (d[w] < p)
      d[w] = p;
  }

  fclose(fin);

  maxVal = d[1];
  for (i = 2; i <= g; i++)
    maxVal = max(maxVal, d[i]);

  fout = fopen("rucsac.out", "w");
  fprintf(fout, "%d", maxVal);
  fclose(fout);

  return 0;
}