Cod sursa(job #2935926)

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

void read_uint32_t(FILE *__restrict stream, uint32_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);
  }
}
uint32_t __inline__ __attribute((pure)) min(uint32_t o1, uint32_t o2) {
  return o1 < o2 ? o1 : o2;
}

uint32_t a[10001];
uint32_t n, w;

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

    memset(a, 0x5F, sizeof(a));
    a[0] = 0;
    {
      int32_t i, j;
      uint32_t e, c;
      for(i = 0; i < n; ++i) {
        read_uint32_t(in, &e);
        read_uint32_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");

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