Pagini recente » Cod sursa (job #281532) | Cod sursa (job #355407) | Cod sursa (job #2773158) | Cod sursa (job #2499509) | Cod sursa (job #1467310)
#include <cstdio>
#define max(i, j) (i > j ? i : j)
#define min(i, j) (i < j ? i : j)
using namespace std;
int i, j, g, w, eg[1001], cg[1001];
int c[1001][5001], maxim, s;
int main()
{
FILE *in = fopen("energii.in", "r");
FILE *out = fopen("energii.out", "w");
fscanf(in, "%d\n%d", &g, &w);
for (i = 1; i <= g; i++)
{
fscanf(in, "%d %d\n", &eg[i], &cg[i]);
s += cg[i];
}
for (i = 1; i <= g; i++)
for (j = 1; j <= s; j++)
{
c[i][j] = c[i-1][j];
if (cg[i] <= j) c[i][j] = max(c[i-1][j], c[i-1][j-cg[i]] + eg[i]);
maxim = max(maxim, c[i][j]);
}
s = min(s, 5000);
for (i = s; c[g][i-1] >= w; i--);
fprintf(out, "%d", ((c[g][i] >= w) ? i : -1));
return 0;
}