Pagini recente » Cod sursa (job #2607079) | Cod sursa (job #465556) | Cod sursa (job #1175604) | Cod sursa (job #1435289) | Cod sursa (job #1657753)
#include <fstream>
#include <cstring>
using namespace std;
FILE *fin, *fout;
int n, g, pi, gi, A[2][10010], prev, now = 1, sol;
void afisare();
int main()
{
int i, j;
fin = fopen("rucsac.in", "r");
fout = fopen("rucsac.out", "w");
fscanf(fin, "%d%d", &n, &g);
memset(A, -1, 20100);
A[prev][0] = 0;
for (i = 1; i <= n; i++)
{
fscanf(fin, "%d%d", &gi, &pi);
for (j = 0; j <= g; j++)
{
if (A[prev][j] != -1 && j + gi <= g)
A[now][j + gi] = max(A[prev][j + gi], A[prev][j] + pi);
}
//afisare();
swap(prev, now);
}
for (i = 1; i <= g; i++)
{
if (A[prev][i] > sol)
sol = A[prev][i];
}
fprintf(fout, "%d\n", sol);
fclose(fout);
return 0;
}
void afisare()
{
int j;
for (j = 0; j <= g; j++)
fprintf(fout, "%d ", A[prev][j]);
fprintf(fout, "\n");
for (j = 0; j <= g; j++)
fprintf(fout, "%d ", A[now][j]);
fprintf(fout, "\n");
fprintf(fout, "\n");
}