Pagini recente » Cod sursa (job #968638) | Cod sursa (job #509914) | Cod sursa (job #1957718) | Cod sursa (job #2189944) | Cod sursa (job #406924)
Cod sursa(job #406924)
#include <stdio.h>
#define gmax 1005
#define wmax 5005
#define inf 10000000
struct nimic
{
int e, c;
};
int g, w, min=inf;
nimic G [gmax], poz [wmax];
void scan ()
{
int i;
scanf ("%d%d", &g, &w);
for (i=1; i<=g; ++i)
scanf ("%d%d", &G [i].e, &G [i].c);
}
void init ()
{
int i;
for (i=1; i<=w; ++i)
poz [i].c=inf;
}
inline int minim (int a, int b)
{
if (a < b)
return a;
return b;
}
void sume ()
{
int i, j, a;
poz [0].e=1;
poz [0].c=0;
init ();
for (i=1; i<=g; ++i)
for (j=w; j>=0; --j)
if (poz [j].e != 0)
{
a=j+G [i].e;
if (a >= w)
{
if (min > poz [j].c+G[i].c)
min=poz [j].c+G [i].c;
}
else
{
poz [a].c=minim (poz [a].c, poz [j].c+G [i].c);
poz [a].e=1;
}
}
}
int main ()
{
freopen ("energii.in", "r", stdin);
freopen ("energii.out", "w", stdout);
scan ();
sume ();
if (min < inf)
printf ("%d\n", min);
else
printf ("-1");
return 0;
}