Cod sursa(job #628908)
#include <stdio.h>
#define NMAX 1005
#define INF (1<<30)
int W[NMAX], C[NMAX], D[NMAX][NMAX];
int n, Emax;
inline int min(int a, int b)
{
return (a<b)?a:b;
}
int main()
{
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
int i, cw;
scanf("%d %d", &n, &Emax);
for (i=1; i<=n; ++i)
scanf("%d %d", &W[i], &C[i]);
for (i=0; i<=n; ++i)
for (cw=1; cw<=Emax; ++cw)
D[i][cw] = INF;
for (cw=1; cw<=Emax; ++cw)
for (i=1; i<=n; ++i) {
if (W[i] <= cw)
D[i][cw] = min(D[i-1][cw], D[i-1][cw-W[i]]+C[i]);
else
D[i][cw] = min(D[i-1][cw], C[i]);
}
if (D[n][Emax] == INF)
printf("-1\n");
else
printf("%d\n", D[n][Emax]);
return 0;
}