Pagini recente » Cod sursa (job #1336108) | Cod sursa (job #2950160) | Cod sursa (job #1238582) | Cod sursa (job #1063372) | Cod sursa (job #605168)
Cod sursa(job #605168)
#include <stdio.h>
#define nmax 1002
#define mmax 100002
#define maxxx 1000000
int main () {
freopen ("energii.in", "r", stdin);
freopen ("energii.out", "w", stdout);
int mat[nmax][mmax], cost[nmax], en[nmax], g, w, i, j, m;
int min, max, ten, tc;
scanf ("%d%d", &g, &w);
min = maxxx;
max = 0;
for (i = 0; i < g; i++) {
scanf ("%d%d", &en[i], &cost[i]);
if ( en[i] < min)
min = en[i];
max += en[i];
}
m = max - min + 1;
for (i = 0; i < g; i++)
for (j = 0; j < m; j++)
mat[i][j] = -1;
mat [0][en[0] - min] = cost[0];
for (i = 1; i < g; i++) {
mat[i][en[i] - min] = cost[i];
for (j = 0; j < m; j++)
if (mat[i-1][j] != -1) {
ten = en[i] + j;
tc = cost[i] + mat[i-1][j];
if (mat[i][ten] > tc || mat[i][ten] == -1)
mat[i][ten] = tc;
}
for (j = 0; j < m; j++)
if (mat[i - 1][j] != -1 &&
(mat[i][j] == -1 || mat[i][j] > mat[i-1][j]))
mat[i][j] = mat[i-1][j];
}
w -= min;
min = maxxx;
for (j = w ; j < m; j++)
if (min > mat[g-1][j] && mat[g-1][j] != -1)
min = mat[g-1][j];
printf ("%d\n", min);
return 0;
}