Cod sursa(job #1994289)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 24 iunie 2017 16:01:37
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>

const int INF = 2e9;
const int MAXW = 5e4;
const int MAXG = 1e4;

int dp[MAXW + 1], 
    cost[MAXG],
    e[MAXG];

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

int main() {
  int n, wt;
  FILE *f = fopen("energii.in", "r");
  fscanf(f, "%d%d", &n, &wt);
  for (int i = 0; i < n; ++i) {
    fscanf(f, "%d%d", &e[i], &cost[i]);
  }
  for (int i = 1; i <= wt; ++i) {
    dp[i] = INF;
  }
  fclose(f);
  for (int i = 0; i < n; ++i) {
    for (int j = wt; j >= 0; --j) {
      if (e[i] + j > wt) {
        dp[wt] = min(dp[wt], cost[i] + dp[j]);
      } else {
        dp[j + e[i]] = min(dp[j + e[i]], cost[i] + dp[j]);
      }
    } 
  }
  f = fopen("energii.out", "w");
  if (dp[wt] == INF) {
    fprintf(f, "-1\n");
  } else {
    fprintf(f, "%d\n", dp[wt]);
  }
  fclose(f);
  return 0;
}