Pagini recente » Cod sursa (job #766366) | Cod sursa (job #113371) | Cod sursa (job #1321585) | Cod sursa (job #1148043) | Cod sursa (job #1374098)
#include <fstream>
#include <climits>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int g,w,s[100005],e[1005],c[1005];
void citire()
{
fin>>g>>w;
for(int i=1;i<=g;i++)
fin>>e[i]>>c[i];
}
int minim(int a,int b)
{
if(a<b)
return a;
return b;
}
void rezolv()
{
int mnm=INT_MAX,nrm=0;
for(int i=1;i<=g;i++)
{
for(int j=minim(nrm,w);j>=1;j--)
if(s[j])
{
if(s[j+e[i]])
{
if(s[j]+c[i]<s[j+e[i]])
s[j+e[i]]=s[j]+c[i];
}
else
{
s[j+e[i]]=s[j]+c[i];
if(j+e[i]>nrm)
nrm=j+e[i];
}
if(j+e[i]>=w&&s[j+e[i]]<mnm)
mnm=s[j+e[i]];
}
if(s[e[i]])
{
if(s[e[i]]>c[i])
s[e[i]]=c[i];
}
else
{
s[e[i]]=c[i];
if(e[i]>nrm)
nrm=e[i];
}
if(e[i]>=w&&s[e[i]]<mnm)
mnm=s[e[i]];
}
mnm=INT_MAX;
for(int i=w;i<=20000;i++)
if(s[i]!=0&&s[i]<mnm)
mnm=s[i];
if(mnm==INT_MAX)
fout<<-1;
else
fout<<mnm;
}
int main()
{
citire();
rezolv();
return 0;
}