Cod sursa(job #1843100)

Utilizator Alex_dudeDudescu Alexandru Alex_dude Data 8 ianuarie 2017 06:32:53
Problema Problema rucsacului Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#define nmax 5000
#define max(a, b) (((a) > (b))?(a):(b))
using namespace std;

FILE *fin, *fout;

struct Obiect
{
    int greutate;
    int pret;
};

int linie;
int numarObiecte, greutateMaxima;

Obiect obiecte[nmax];
int dinamic[2][nmax];

void dinamica()
{
    for( int i = 0; i < numarObiecte; i++, linie = 1 - linie)
        for(int greutateCurenta = 0; greutateCurenta <= greutateMaxima; greutateCurenta++)
        {
            dinamic[1-linie][greutateCurenta] = dinamic[linie][greutateCurenta];

            if(obiecte[i].greutate <= greutateCurenta)
                dinamic[1-linie][greutateCurenta] = max(dinamic[1-linie][greutateCurenta],
                                                        dinamic[linie][greutateCurenta - obiecte[i].greutate] + obiecte[i].pret);
        }
}

int main()
{
    fin = fopen("rucsac.in", "r");
    fout = fopen("rucsac.out", "w");

    fscanf(fin, "%d %d", &numarObiecte, &greutateMaxima);

    for(int i = 0; i < numarObiecte; i++)
        fscanf(fin, "%d %d", &obiecte[i].greutate, &obiecte[i].pret);

    dinamica();

    fprintf(fout, "%d", dinamic[linie][greutateMaxima]);

    return 0;
}