Pagini recente » Cod sursa (job #2910090) | Cod sursa (job #721949) | Cod sursa (job #2807044) | Cod sursa (job #3223469) | Cod sursa (job #4246)
Cod sursa(job #4246)
#include <fstream.h>
#include <iostream.h>
#define N 1001
#define M 1001
int main()
{
int G,W,E[M],C[M],v[N]={0},i,j,ult;
long c[N]={0},minim;
v[0]=-1;
ifstream f("energii.in");
ofstream g("energii.out");
f>>G>>W;
for(i=1;i<=G;i++)
{
f>>E[i];
f>>C[i];
}
f.close();
long sum=0;
for(i=1;i<=G;i++)
sum+=E[i];
if(sum<W)
{
g<<-1; g.close();
return 0;
}
ult=sum;
for(i=1;i<=G;i++)
for(j=ult;j>=0;j--)
{
if(v[j+E[i]]!=0 && c[j+E[i]]>C[i]+c[j] && j+E[i]<=W)
{
if(j+E[i]==W && c[j+E[i]]<minim)
minim=c[j+E[i]];
c[j+E[i]]=C[i]+c[j];
}
if(v[j]!=0 && v[j+E[i]]==0 && j+E[i]<=W)
{
if(j+E[i]==W && c[j+E[i]]<minim)
minim=c[j+E[i]];
v[j+E[i]]=E[i];
c[j+E[i]]=c[j]+C[i];
}
}
/* j=W;
while(v[j]==0) j++;
minim=c[j];
for(i=j+1;i<=sum;i++)
if(c[i]<minim)
minim=c[i];*/
g<<minim;
g.close();
return 0;
}