Pagini recente » Cod sursa (job #2335705) | Cod sursa (job #977486) | Cod sursa (job #1414247) | Cod sursa (job #720644) | Cod sursa (job #577513)
Cod sursa(job #577513)
#include<fstream>
#include<iostream>
using namespace std;
int n,W,e[1005],cost[1005],costmin[10000],sum;
int uz[10000][1005];
ofstream fout("energii.out");
void Rezolva()
{
int S,i,j,limita,nr,gata;
limita=W+4995;
for(S=1;S<=limita;S++)
costmin[S]=2000000000;
for(S=1;S<=W;S++)
{
for(i=1;i<=n;i++)
{
if(e[i]<=S && uz[S-e[i]][i]==0 && costmin[S-e[i]]!=2000000000)
{
if(costmin[S]>cost[i]+costmin[S-e[i]])
{
costmin[S]=cost[i]+costmin[S-e[i]];
nr=0;
for(j=1;j<=n;j++)
{
uz[S][j]=uz[S-e[i]][j];
if(uz[S][j]==1)
nr++;
}
uz[S][i]=1;
nr++;
uz[S][0]=nr;
}
}
}
}
if(costmin[W]==2000000000)
{
gata=0;
for(S=W+1;!gata;S++)
{
for(i=1;i<=n;i++)
{
if(e[i]<=S && uz[S-e[i]][i]==0 && costmin[S-e[i]]!=2000000000)
{
if(costmin[S]>cost[i]+costmin[S-e[i]])
{
costmin[S]=cost[i]+costmin[S-e[i]];
nr=0;
for(j=1;j<=n;j++)
{
uz[S][j]=uz[S-e[i]][j];
if(uz[S][j]==1)
nr++;
}
uz[S][i]=1;
nr++;
uz[S][0]=nr;
}
}
}
if(costmin[S]!=2000000000)
gata=costmin[S];
}
fout<<gata<<"\n";
fout.close();
}
else
{
fout<<costmin[W]<<"\n";
fout.close();
}
}
int main()
{
int i;
ifstream fin("energii.in");
fin>>n>>W;
for(i=1;i<=n;i++)
fin>>e[i]>>cost[i];
fin.close();
for(i=1;i<=n;i++)
sum+=e[i];
if(sum<W)
{
fout<<-1<<"\n";
fout.close();
}
else
Rezolva();
return 0;
}