Cod sursa(job #1586791)

Utilizator alisa.mirelaAlisa Rus alisa.mirela Data 1 februarie 2016 17:35:33
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
using namespace std;
#define NMax 101
#define MaxG 301
int n,Gmax;
int c[NMax],g[NMax];
int Cmax[MaxG],Uz[MaxG][NMax];
void Citire();
void Rezolvare();
void Afisare();
int main()
{Citire();
Rezolvare();
Afisare();
return 0;
}
void Citire()
{ ifstream fin("rucsac.in");
fin >>n>>Gmax;
for(int i=1;i<=n;i++) fin>>g[i];
for(int i=1;i<=n;i++) fin>>c[i];
fin.close();
}

void Rezolvare()
{
    int S,k,i;
    for(S=1;S<=Gmax;S++) Cmax[S]=-1;

     for(S=1;S<=Gmax;S++)
        for(i=1;i<=n;i++)
     if(g[i]<=S&&Cmax[S-g[i]]!=-1 && !Uz[S-g[i]][i])
        if(Cmax[S]<c[i]+Cmax[S-g[i]])
     {
        Cmax[S]=c[i]+Cmax[S-g[i]];
        for(k=1;k<=n;k++)
            Uz[S][k]=Uz[S-g[i]][k];
            Uz[S][i]=1;
     }
    }
    void Afisare()
    {
ofstream fout("rucsac.out");
if(Cmax[Gmax]==-1) fout<<"Imposibil";
else
        fout<<Cmax[Gmax]<<" "<<endl;

fout.close();
    }