Pagini recente » Istoria paginii runda/moisil2018 | Cod sursa (job #1565572) | Cod sursa (job #1690173) | Cod sursa (job #2032851) | Cod sursa (job #2357329)
#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;
}