Pagini recente » Istoria paginii utilizator/s3rbanika | Rating Sebasian (MihaiSebastian) | Cod sursa (job #298940) | Rating darius (dariushada2) | Cod sursa (job #108544)
Cod sursa(job #108544)
#include<stdio.h>
#include<stdlib.h>
#include<values.h>
#define S 20000
int s[20000],w,n,cost[20000];
typedef struct{int a,c;}Energie;
Energie x[1005];
int cmp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
FILE*f=fopen("energii.in","r");
FILE*g=fopen("energii.out","w");
int main()
{
long k,i,j,m;
fscanf(f,"%d %d",&n,&w);
s[0]=1;
for(i=1;i<=n;++i) fscanf(f,"%d %d",&x[i].a,&x[i].c);
for(i=1;i<=S;++i) cost[i]=MAXINT;
qsort(x,n+1,sizeof(x[1]),cmp);
for(i=1;i<=n;++i)
{
for(j=S;j>=0;--j)
if(s[j]==1)
{
s[j+x[i].a]=1;
if(cost[j+x[i].a]>cost[j]+x[i].c)
cost[j+x[i].a]=cost[j]+x[i].c;
}
}
if(s[w]==1) i=w;
else
{
int ok=1;
i=w+1;
while(s[i]==MAXINT&&i<=S)
{
i++;
if(i!=MAXINT) { ok=0;break; }
}
if(ok==1) {fprintf(g,"-1");return 0; }
}
fprintf(g,"%d",cost[i]);
return 0;
}