Pagini recente » Cod sursa (job #849086) | Cod sursa (job #1291444) | Cod sursa (job #750843) | Cod sursa (job #431345) | Cod sursa (job #1291531)
#include<fstream>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
struct per
{
int e,c;
};
per v[3][20001];
int nv[3];
int G, W;
per x[1005],aux;
int main()
{
int i, j, k;
fin>>G>>W;
for(i=1;i<=G;i++)
{
fin>>x[i].e>>x[i].c;
}
for(i=1;i<=G;i++)
{
for(j=i+1;j<=G;j++)
{
if(x[i].e>x[j].e)
{
aux=x[i];
x[i]=x[j];
x[j]=aux;
}
}
}
nv[0]=1;
v[0][1].e=0;
v[0][1].c=0;
for(i=1;i<=G;i++)
{
nv[2]=0;
for(j=1;j<=nv[1-i%2]&&v[1-i%2][j].e<W;j++)
{
nv[2]++;
v[2][j].e=v[1-i%2][j].e+x[i].e;
v[2][j].c=v[1-i%2][j].c+x[i].c;
}
j=1;
k=1;
nv[i%2]=0;
while(j<=nv[1-i%2] && k<=nv[2])
{
nv[i%2]++;
if(v[1-i%2][j].e==v[2][k].e)
{
if(v[1-i%2][j].c>v[2][k].c)
{
v[i%2][nv[i%2]]=v[2][k];
}
else
{
v[i%2][nv[i%2]]=v[1-i%2][j];
}
k++;
j++;
}
else
{
if(v[1-i%2][j].e<v[2][k].e)
{
v[i%2][nv[i%2]]=v[1-i%2][j];
j++;
}
else
{
v[i%2][nv[i%2]]=v[2][k];
k++;
}
}
}
while(j<=nv[1-i%2])
{
nv[i%2]++;
v[i%2][nv[i%2]]=v[1-i%2][j];
j++;
}
while(k<=nv[2])
{
nv[i%2]++;
v[i%2][nv[i%2]]=v[2][k];
k++;
}
k=j;
}
for(i=1;i<=nv[G%2];i++)
{
if(v[G%2][i].e>=W)
{
//fout<<v[G%2][i].e<<" "<<v[G%2][i].c<<endl;
break;
}
}
if(i>nv[G%2])fout<<-1;
else fout<<v[G%2][i].c;
fout.close();
return 0;
}