Cod sursa(job #2310337)

Utilizator AlexPop28Pop Alex-Nicolae AlexPop28 Data 31 decembrie 2018 11:46:16
Problema Energii Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
#define all(cont) cont.begin(), cont.end()
#define pb push_back
#define fi first
#define se second
#define DEBUG(x) cerr << (#x) << ": " << (x) << '\n'

using namespace std;

typedef pair <int, int> pii;
typedef vector <int> vi;
typedef long long ll;
typedef unsigned long long ull;

const int NMAX = 5005;

int n, w;
pii v[NMAX];
int dp[NMAX];

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
#ifdef LOCAL_DEFINE
  freopen (".in", "r", stdin);
#endif

  freopen ("energii.in", "r", stdin);
  freopen ("energii.out", "w", stdout);

  scanf ("%d\n%d\n", &n, &w);
  for (int i = 1; i <= n; ++i) {
    scanf ("%d %d\n", &v[i].fi, &v[i].se);
  }

  for (int i = 0; i <= w; ++i) dp[i] = (1 << 30);
  dp[0] = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = v[i].fi; j >= 1; --j) {
      dp[j] = min (dp[j], v[i].se);
    }
    for (int j = w; j >= 0; --j) {
      int aux = min (j + v[i].fi, w);
      dp[aux] = min (dp[aux], dp[j] + v[i].se);
    }
  }

  if (dp[w] != (1 << 30))
    printf ("%d\n", dp[w]);
  else
    printf ("-1\n");

  fclose (stdin);
  fclose (stdout);
  return 0;
}