Cod sursa(job #1923006)

Utilizator SenibelanMales Sebastian Senibelan Data 10 martie 2017 20:14:11
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>

using namespace std;

ifstream in("energii.in");
ofstream out("energii.out");

struct generator{
  int p, w;
};

const int oo = 2000000000;
const int NMAX = 1005;
const int GMAX = 5005;
int N, G;
int sum;
int DP[NMAX][GMAX];

void Read(){
  in >> N >> G;
  for(int i = 0; i <= N; ++i){
    for(int j = 1; j <= G; ++j)
      DP[i][j] = oo;
  }
}

void Solve(){
  int p, w;
  for(int i = 1; i <= N; ++i){
    in >> p >> w;
    sum += p;
    generator gen = {p, w};
    for(int j = 1; j <= G; ++j){
      DP[i][j] = min(DP[i - 1][j], DP[i - 1][max(0, j - gen.p)] + gen.w);
    }
  }
}

void Print(){
  if(sum < G)
    out << -1 << "\n";
  else
    out << DP[N][G] << "\n";
}

int main(){
  Read();
  Solve();
  Print();
  return 0;
}