Pagini recente » Cod sursa (job #857067) | Cod sursa (job #610620) | Cod sursa (job #1950869) | Cod sursa (job #2531989) | Cod sursa (job #210878)
Cod sursa(job #210878)
#include <stdio.h>
#define min(x,y) (x<y?x:y)
int g,w;
int eg[1005],cg[1005];
int c[1005][5005];
void read()
{
int i;
scanf ("%d%d",&g,&w);
for (i=1; i<=g; ++i)
scanf ("%d%d",&eg[i],&cg[i]);
}
void solve ()
{
int i,j;
for (i=1; i<=g; ++i)
for (j=1; j<=w; ++j)
c[i][j]=-1;
for (i=1; i<=eg[1]; ++i)
c[1][i]=cg[1];
for (i=2; i<=g; ++i)
c[i][1]=min(c[i-1][1],cg[i]);
for (i=2; i<=g; ++i)
for (j=2; j<=w; ++j)
if (eg[i]<=j)
{
if (c[i-1][j]!=-1 && c[i-1][j-eg[i]]!=-1)
c[i][j]=min(c[i-1][j],cg[i]+c[i-1][j-eg[i]]);
else if (c[i-1][j-eg[i]]!=-1)
c[i][j]=cg[i]+c[i-1][j-eg[i]];
}
else
{
if (c[i-1][j]!=-1)
c[i][j]=min(c[i-1][j],cg[i]);
else
c[i][j]=cg[i];
}
}
int main ()
{
freopen ("energii.in","r",stdin);
freopen ("energii.out","w",stdout);
read ();
solve ();
printf ("%d",c[g][w]);
return 0;
}