Cod sursa(job #819539)

Utilizator popescu95Popescu Alexandru Cezar popescu95 Data 19 noiembrie 2012 11:20:28
Problema Problema rucsacului Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#define dmax 5024
using namespace std;

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

int n;
int g[dmax], c[dmax], gmax, cmax[dmax], uz[dmax][dmax];

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>>g[i]>>c[i];
}

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

void afisare()
{
    int i, maxim=-1, savei;
    for(i=1;i<=gmax;i++)
        if(cmax[i]>maxim)
        {
            maxim=cmax[i];
            savei=i;
        }
    fout<<maxim<<'\n';
    /*for(i=1;i<=n;i++)
        if(uz[savei][i]==1)
            fout<<g[i]<<' '<<c[i]<<'\n';*/
}