Pagini recente » Cod sursa (job #1857925) | Cod sursa (job #2256100) | Cod sursa (job #2593917) | Cod sursa (job #557468) | Cod sursa (job #11371)
Cod sursa(job #11371)
#include<stdio.h>
#define maxN 1001
#define maxW 5001
int W,N,E[maxN],C[maxN],c[2][maxW],ok,n,MIN,emin2;
void citire()
{freopen("energii.in","r",stdin);
scanf("%d\n%d\n",&N,&W);
int cmin=0; ok=0; MIN=10400;
int x,y;
emin2=n=0;
for(int i=1;i<=N;i++)
{scanf("%d %d\n",&x,&y);
if (x>=W && y<MIN) MIN=y;
else if(x<W) {E[++n]= x; emin2+=x;C[n]=y;}
cmin+=x;
}
if(cmin>=W) ok=1;
}
int main ()
{citire();
freopen("energii.out","w",stdout);
int i,j;
for(i=1;i<=W;i++) c[0][i]=C[1];
for(i=2;i<=n;i++)
for(j=1;j<=W;j++)
{c[(i+1)%2][j]=c[i%2][j];
if(E[i]<=j) if(c[i%2][j-E[i]]+C[i]<c[(i+1)%2][j])c[(i+1)%2][j]=c[i%2][j-E[i]]+C[i];
}
if (emin2>=W && ok) {if (c[n][W]<MIN) printf("%d\n",c[n][W]);
else printf("%d\n",MIN); }
else if(emin2<W && ok) printf("%d\n",MIN);
else printf("-1\n");
return 0;}