Pagini recente » Cod sursa (job #708469) | Cod sursa (job #1207113) | Cod sursa (job #1081277) | Cod sursa (job #3270089) | Cod sursa (job #605271)
Cod sursa(job #605271)
#include <stdio.h>
#include <stdlib.h>
#define nmax 1002
#define mmax 6002
#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;
// mat = malloc (g * sizeof (int *));
if (m < mmax)
max = m;
else
max = mmax;
// for (i = 0; i < g; i++)
// mat[i] = malloc (max * sizeof (int));
for (i = 0; i < g; i++)
for (j = 0; j < max; 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 < max; 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 ) && ten < max)
mat[i][ten] = tc;
}
for (j = 0; j < max; 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 < max; j++)
if (min > mat[g-1][j] && mat[g-1][j] != -1)
min = mat[g-1][j];
/*
for (i = 0; i < g; i++) {
for (j = 0; j < m; j++)
printf ("%d ", mat[i][j]);
printf ("\n");
}
*/
if (min == maxxx)
printf ("-1\n");
else
printf ("%d\n", min);
return 0;
}