Pagini recente » Cod sursa (job #1406216) | Cod sursa (job #568955) | Cod sursa (job #621547) | Cod sursa (job #3287115) | Cod sursa (job #567012)
Cod sursa(job #567012)
#include <cstdio>
const int INF = 99999999;
int C[2][5005], EG[1001], CG[1001];
int main()
{
FILE *f = fopen("energii.in", "r");
FILE *g = fopen("energii.out", "w");
int n, W;
fscanf(f, "%d %d", &n, &W);
for (int i = 1 ; i <= n ; ++i)
{
fscanf(f, "%d %d", &EG[i], &CG[i]);
}
C[0][0] = 0;
for (int i = 1 ; i <= W ; ++i)
C[0][i] = INF;
int last = 1;
for (int i = 1 ; i <= n ; ++i)
{
for (int j = 1 ; j <= W ; ++j)
{
C[last][j] = C[(last + 1) % 2][j];
if (j < EG[i])
{
if (CG[i] < C[last][j])
C[last][j] = CG[i];
}
else if (C[(last + 1) % 2][j - EG[i]] != INF && (C[(last + 1) % 2][j - EG[i]] + CG[i] < C[last][j]))
C[last][j] = C[(last + 1) % 2][j - EG[i]] + CG[i];
}
last = (last + 1)%2;
}
last = (last + 1)%2;
if (C[n][W] != INF)
fprintf(g, "%d\n", C[last][W]);
else
fprintf(g,"-1\n");
return 0;
}