Pagini recente » Cod sursa (job #1102740) | Cod sursa (job #1034811) | Monitorul de evaluare | Cod sursa (job #1355084) | Cod sursa (job #1489310)
#include <stdio.h>
#define MAX1 1005
#define MAX2 6005
#define INF 1<<30
#define min(a, b) (a < b ? a : b)
typedef struct{
int e, c;
} gen;
int G, W, i, d[2][MAX2];
gen g[MAX1];
void rucsac();
int main(){
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
scanf("%d%d", &G, &W);
for(i = 1; i <= G; i++)
scanf("%d%d", &g[i].e, &g[i].c);
rucsac();
printf("%d\n", d[G & 1][W] == 0 ? -1 : d[G & 1][W]);
return 0;
}
void rucsac(){
int i, j;
for(i = 0; i <= W; i++)
d[0][i] = d[1][i] = INF;
for(i = 0; i <= g[i].e; i++)
d[1][i] = g[i].c;
for(i = 2; i <= G; i++)
for(j = 0; j <= W; j++){
if(j - g[i].e < 0)
d[i & 1][j] = d[(i - 1) & 1][j];
else
d[i & 1][j] = min(d[(i - 1) & 1][j], d[(i - 1) & 1][j - g[i].e] + g[i].c);
}
}