Cod sursa(job #2698792)

Utilizator Teodor94Teodor Plop Teodor94 Data 23 ianuarie 2021 00:53:30
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>

#define INF 1e9
#define MAX_N 1000
#define MAX_W 5000

inline int min(int a, int b) {
  return a < b ? a : b;
}

int d[MAX_W + 1];

int main() {
  FILE *fin, *fout;
  int n, w, e, c, i;

  fin = fopen("energii.in", "r");
  fout = fopen("energii.out", "w");

  fscanf(fin, "%d%d", &n, &w);

  d[0] = 0;
  for (i = 1; i <= w; ++i)
    d[i] = INF;

  while (n--) {
    fscanf(fin, "%d%d", &e, &c);

    for (i = w; i >= e; --i)
      if (d[i - e] != INF)
        d[i] = min(d[i], d[i - e] + c);

    for (i = e - 1; i >= 0; --i)
      d[i] = min(d[i], c);
  }

  fprintf(fout, "%d\n", d[w] == INF ? -1 : d[w]);

  fclose(fin);
  fclose(fout);
  return 0;
}