Cod sursa(job #2935930)

Utilizator ptlsebiptl sebi ptlsebi Data 7 noiembrie 2022 18:18:02
Problema Energii Scor 50
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <stdint.h>
#include <string.h>

void read_uint64_t(FILE *__restrict stream, uint64_t *__restrict nr) {
  uint8_t ch;
  *nr = 0;
  while ((ch = fgetc(stream)) && ('0' <= ch && ch <= '9')) {
    *nr *= 10;
    *nr += ch - '0';
  }
  if (ch == '\r') {
    fgetc(stream);
  }
}
uint64_t __inline__ __attribute((pure)) min(uint64_t o1, uint64_t o2) {
  return o1 < o2 ? o1 : o2;
}

uint64_t a[20001];
uint64_t n, w;

int main(void) {
  {
    FILE *__restrict in = fopen("energii.in", "r");
  
    read_uint64_t(in, &n);
    read_uint64_t(in, &w);

    memset(a, 0x5F, sizeof(a));
    a[0] = 0;
    {
      int64_t i, j;
      uint64_t e, c;
      for(i = 0; i < n; ++i) {
        read_uint64_t(in, &e);
        read_uint64_t(in, &c);
        for(j = 10000; j >= e; --j) {
          a[j] = min(a[j], a[j - e] + c);
        }
      }
    }
  
    fclose(in);
  }

  {
    FILE *__restrict out = fopen("energii.out", "w");

    uint64_t mi = 0x5F5F5F5F5F5F5F5F;
    {
      int64_t i;
      for(i = w; i < 10001; ++i) {
        mi = min(mi, a[i]);
      }
    }
  
    if (mi == 0x5F5F5F5F5F5F5F5F) {
      fputs("-1\n", out);
    } else {
      fprintf(out, "%llu\n", mi);
    }
  
    fclose(out);
  }
  return 0;
}