Cod sursa(job #1839814)

Utilizator eduardturtoiEduard Turtoi eduardturtoi Data 3 ianuarie 2017 14:44:13
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#define NMax 5001
#define MaxG 10001
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int n,GMax,Greutate[NMax],Valoare[NMax],CMax[NMax],Uz[MaxG][NMax];

void Citire()
{
    int i;
    fin>>n>>GMax;
    for(i=1;i<=n;i++)
        fin>>Greutate[i]>>Valoare[i];
}

void Dinamica()
{
    int S,i,k;
    for(S=1;S<=GMax;S++)
        CMax[S]=-1;
    for(S=1;S<=GMax;S++)
        for(i=1;i<=n;i++)
            if(Greutate[i]<=S && CMax[S-Greutate[i]]!=-1 && !Uz[S-Greutate[i]][i])
                if(CMax[S]<Valoare[i]+CMax[S-Greutate[i]])
                {
                    CMax[S]=Valoare[i]+CMax[S-Greutate[i]];
                    for(k=1;k<=n;k++)
                        Uz[S][k]=Uz[S-Greutate[i]][k];
                    Uz[S][i]=1;
                }
}

int main()
{
    Citire();
    Dinamica();
    fout<<CMax[GMax];
    return 0;
}