Pagini recente » Cod sursa (job #1561279) | Cod sursa (job #1731270) | Cod sursa (job #1361344) | Cod sursa (job #1206714) | Cod sursa (job #159440)
Cod sursa(job #159440)
//energii
#include<stdio.h>
int min[5002][1002];
int main()
{int i,j, gen,w,en[1002], c[1002];
long int sum1=0,cmin=10000000,add,a;
//ifstream f("energii.in");
//ofstream g("energii.out");
//f>>gen>>w;
FILE *f=fopen("energii.in","r"),*g=fopen("energii.out","w");
fscanf(f,"%d %d", &gen,&w);
for(i=1;i<=gen;++i)
{fscanf(f,"%d %d",&en[i],&c[i]);
sum1+=en[i];
if(cmin>c[i])
{ cmin=c[i];
add=i;}
if(cmin==c[i])
if(en[i]>en[add])
add=i;
}
if(sum1<w)
{fprintf(g,"%d","-1",'\n');
f.close();
g.close();
return 0;}
for(i=1;i<=en[add];i++)
{min[i][0]=c[add];
min[i][add]=1;}
for(i=en[add]+1;i<=w;i++)
{ cmin=10000000;
for(j=1;j<=gen;++j)
{a=i-en[j]; if(a<0) a=0;
if(min[a][j]==0)
if(min[a][0]+c[j]<cmin)
{cmin=min[a][0]+c[j];
add=j;
}
}
min[i][0]=cmin;
min[i][add]=1;
a=i-en[add];
if(a<0) a=0;
for(j=1;j<=gen;++j)
if(min[a][j]==1)
min[i][j]=1;
}
fprintf(g,"%d",min[w][0],'\n');
fclose(f);
fclose(g);
return 0;
}