Pagini recente » Cod sursa (job #1778552) | Cod sursa (job #1313918) | Cod sursa (job #317024) | Cod sursa (job #1715925) | Cod sursa (job #1122967)
/*
Keep it Simple!
*/
#include<stdio.h>
#define MaxN 1005
#define MaxS 10055025
#define inf 10055030
#define MinV(a,b) (a<b?a:b)
int SumV;
int G,W;
int E[MaxN],C[MaxN];
int Mat[MaxS];
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
scanf("%d%d",&G,&W);
for(int i=1; i<=G; i++)
{
scanf("%d%d",&E[i],&C[i]);
SumV+=E[i];
}
if( SumV < W)
{
printf("-1");
return 0;
}
for(int j=1;j<=SumV;j++)
Mat[j] = inf;
for(int i=1;i<=G;i++)
for(int j=W; j>=0; j--)
{
if( j + E[i] <= W )
Mat[j+E[i]] = MinV(Mat[j]+C[i],Mat[j+E[i]]);
else if ( j + E[i] > W)
Mat[W] = MinV(Mat[W],Mat[j] + C[i]);
}
printf("%d",Mat[W] == inf ? -1 : Mat[W]);
}