Pagini recente » Cod sursa (job #476085) | Cod sursa (job #111352) | Cod sursa (job #1943956) | Cod sursa (job #2149538) | Cod sursa (job #516062)
Cod sursa(job #516062)
#include <iostream>
#include <string>
using namespace std;
#define NM 1005
#define EM 10005
#define inf 0x3f3f3f3f
int W, G, EG[NM], CG[NM], tot, EMAX, CMIN[EM][2];
int main()
{
freopen ("energii.in", "r", stdin);
freopen ("energii.out", "w", stdout);
scanf ("%d %d", &G, &W);
for (int i = 1; i <= G; ++i)
{
scanf ("%d %d", &EG[i], &CG[i]);
tot += EG[i];
}
if (tot < W)
{
printf ("-1");
return 0;
}
memset (CMIN, inf, sizeof(CMIN));
CMIN[0][0] = 0;
for (int i = 1; i <= G; ++i)
{
int cur = i % 2;
int prev = !cur;
EMAX += EG[i];
EMAX = min(EMAX, 20000);
for (int j = 0; j < EG[i]; ++j) CMIN[j][cur] = CMIN[j][prev];
for (int j = EG[i]; j <= max(EMAX, W); ++j) CMIN[j][cur] = min (CMIN[j-EG[i]][prev] + CG[i], CMIN[j][prev]);
}
int best = inf;
for (int j = W; j <= max(EMAX, W); ++j) best = min(best, CMIN[j][G%2]);
printf ("%d\n", best);
return 0;
}