Cod sursa(job #1657756)

Utilizator ciprianprohozescuProhozescu Ciprian ciprianprohozescu Data 20 martie 2016 19:34:55
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <cstring>

using namespace std;

FILE *fin, *fout;

int n, g, pi, gi, A[2][10010], ante, 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[ante][0] = 0;
    for (i = 1; i <= n; i++)
    {
        fscanf(fin, "%d%d", &gi, &pi);
        for (j = 0; j <= g; j++)
        {
            if (A[ante][j] != -1 && j + gi <= g)
                A[now][j + gi] = max(A[ante][j + gi], A[ante][j] + pi);
        }
        //afisare();
        swap(ante, now);
    }
    for (i = 1; i <= g; i++)
    {
        if (A[ante][i] > sol)
            sol = A[ante][i];
    }
    fprintf(fout, "%d\n", sol);
    fclose(fout);
    return 0;
}

void afisare()
{
    int j;
    for (j = 0; j <= g; j++)
        fprintf(fout, "%d ", A[ante][j]);
    fprintf(fout, "\n");
    for (j = 0; j <= g; j++)
        fprintf(fout, "%d ", A[now][j]);
    fprintf(fout, "\n");
    fprintf(fout, "\n");
}