Cod sursa(job #819832)

Utilizator MonicaVizitiuMonica Vizitiu MonicaVizitiu Data 19 noiembrie 2012 19:13:00
Problema Problema rucsacului Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>

using namespace std;

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

int n, gr[2001], c[2001], cmax[2001], uz[2001][2001], GMAX;

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

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

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

void pd()
{
    int i, j, G, nrmax;
    for(G=1;G<=GMAX;G++)
    {
        nrmax=-1;
        for(i=1;i<=n;i++)
            if(gr[i]<=G&&uz[G-gr[i]][i]==0)
                if(c[i]+cmax[G-gr[i]]>nrmax)
                {
                    nrmax=c[i]+cmax[G-gr[i]];
                    cmax[G]=c[i]+cmax[G-gr[i]];
                    for(j=1;j<=n;j++)
                        uz[G][j]=uz[G-gr[i]][j];
                    uz[G][i]=1;
                }
    }
}

void afisare()
{
    int i, nrmax=-1, ind;
    for(i=1;i<=GMAX;i++)
        if(cmax[i]>nrmax)
        {
            nrmax=cmax[i]; ind=i;
        }
    fout<<nrmax<<'\n';
    //for(i=1;i<=n;i++)
        //if(uz[ind][i]) fout<<i<<' ';
}