Cod sursa(job #1810451)

Utilizator M.AndreiMuntea Andrei Marius M.Andrei Data 20 noiembrie 2016 01:08:12
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

ifstream f{ "energii.in" };
ofstream q{ "energii.out" };

bool sCmp(pair<int, int>left, pair<int, int> right)
{
   return left.second < right.second;
}

int main()
{
   int g, w;
   vector<int> v(5005, -1);
   vector<pair<int, int>> k;
   int e, c;
   
   f >> g >> w;
   for (int i = 0; i < g; ++i)
   {
      f >> e >> c;
      k.push_back(make_pair(e, c));
   }
   sort(k.begin(), k.end(), sCmp);


   for(pair<int,int> p : k)
   {
      e = p.first;
      c = p.second;
      if (e >= w)
      {
         if (c < v[w] || v[w] == -1) v[w] = c;
         continue;
      }
      for (int i = w - 1; i > 0; i--)
      {
         if (v[i] != -1)
         {
            if (i + e >= w && (v[w] > v[i] + c || v[w] == -1)) v[w] = v[i] + c;
            else if (i + e < w && (v[i + e] > v[i] + c || v[i+e] == -1)) v[i + e] = v[i] + c;
         }
      }
      if (v[e] == -1) v[e] = c;
   }

   q << v[w];
   f.close();
   q.close();
   return 0;
}