Cod sursa(job #2357329)

Utilizator Teo_1101Mititelu Teodor Teo_1101 Data 27 februarie 2019 11:57:07
Problema Energii Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <set>
using namespace std;

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

const int INF = (1 << 30);
int G,W;
int mat[5010];
int x,y;
set <int> L;
queue <int> C;
void Read()
{
    fin>>G>>W;
    for(int i=1;i<=5002;++i)
        mat[i]=INF;
    for(int i=1;i<=G;++i)
    {
        fin>>x>>y;
        int l,c;
        set<int>::iterator it;
        for( it=L.begin();it!=L.end();++it)
        {
            l=*it;
            if((l+x)<5001)
            {mat[l+x]=min(mat[l+x],mat[l]+y);
            C.push(l+x);}
        }
        while(!C.empty())
        {
            L.insert(C.front());C.pop();
        }
        mat[x]=min(mat[x],y);
        L.insert(x);
    }
    int cost=INF;
    for(int i=W;i<=5002;++i)
        //fout<<mat[i]<<"\n";
        cost=min(cost,mat[i]);
    if(cost!=INF)fout<<cost;
    else fout<<-1;
}
int main()
{
    Read();
    return 0;
}