Cod sursa(job #819528)

Utilizator cristina_hoameaCristina cristina_hoamea Data 19 noiembrie 2012 11:04:31
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#define NMAX 101
#define GMAX 301

using namespace std;

ifstream fin("rucsac.in");
ofstream fout("rucsac.out");

int n, gmax;
int g[NMAX], c[NMAX];
int uz[GMAX][GMAX];
int cmax[NMAX];

void citire();
void pd();
void afisare();

int main()
{
    citire();
    pd();
    afisare();
    return 0;
}

void citire()
{
    fin>>n>>gmax;
    for(int i=1; i<=n; i++)
        fin>>g[i]>>c[i];
}

void pd()
{
    int i, j, k;
    for(i=1; i<=gmax; i++) cmax[i]=-1;
    for(i=1; i<=gmax; i++)
        for(j=1; j<=gmax; j++)
            if(g[j]<=i && cmax[i-g[j]]!=-1 && uz[i-g[j]][j]==0)
                if(cmax[i]<c[i]+cmax[i-g[j]])
                {
                    cmax[i]=c[j]+cmax[i-g[j]];
                    for(k=1; k<=n; k++)
                        uz[i][k]=uz[i-g[j]][k];
                    uz[i][j]=1;
                }
}

void afisare()
{
    int k;
    if(cmax[gmax]!=-1)
     //{
        fout<<cmax[gmax]<<'\n';
      //  for(k=1; k<=n; k++)
       //      if(uz[gmax][k]) fout<<k<<' ';
       // fout<<'\n';
    //}
    fout.close();
}