Pagini recente » Cod sursa (job #166971) | Cod sursa (job #3172336) | Cod sursa (job #1726080) | Cod sursa (job #307897) | Cod sursa (job #371377)
Cod sursa(job #371377)
#include<cstdio>
#define GMAX 1001
#define WMAX 5001<<1
#define MIN 1<<30
#define FIN "energii.in"
#define FOUT "energii.out"
using namespace std;
int W,G[WMAX],C[WMAX],REZ[WMAX],u[WMAX],i,j,n,total;
int main()
{freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d %d",&n,&W);
for(i=1;i<=n;i++) {scanf("%d %d",&G[i],&C[i]);}
for(i=0;i<=W;i++) REZ[i]=MIN;
REZ[0]=0;
u[0]=1;
for(i=1;i<=n;i++)
for(j=W;j>=0;j--)
{ if(u[j] && REZ[j]+C[i]<REZ[j+G[i]]) {u[j+G[i]]=1;REZ[j+G[i]]=REZ[j]+C[i];}
if(j+G[i]>total) total=j+G[i];}
int minim=MIN;
for(i=total;i>=W;i--)
if(REZ[i]<minim) minim=REZ[i];
if(minim==MIN) printf("-1\n");
else printf("%d\n",minim);
return 0;}