Cod sursa(job #2148431)

Utilizator AndreiMaximIonutMaxim Andrei AndreiMaximIonut Data 1 martie 2018 18:34:29
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>

using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
#define Nm 5001
short N, Gmax;
short W[Nm], P[Nm];
int Cmax[10001];
bool Uz[10001][Nm];
int main()
{
    short i, g, k;

    fin>>N>>Gmax;
    for(i = 1; i <= N; ++i)
        fin>>W[i]>>P[i];

    for(i = 1; i <= N; ++i) Cmax[i] = -1;

    for(g = 1; g <= Gmax; ++g)
        for(i = 1; i <= N; ++i)
            if(W[i] <= g && Cmax[g - W[i]] != -1 && !Uz[g - W[i]][i])
                if(Cmax[g] < Cmax[g - W[i]] + (int)P[i])
                {
                    Cmax[g] = Cmax[g - W[i]] + (int)P[i];

                    for(k = 1; k <= N; ++k)
                        Uz[g][k] = Uz[g - W[i]][k];

                    Uz[g][i] = true;
                }

    fout<<Cmax[Gmax];
    return 0;
}