Cod sursa(job #1274080)

Utilizator bujorcatalin14Bujor Catalin bujorcatalin14 Data 23 noiembrie 2014 11:53:18
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int G,n;
int p[5000],g[5000]; // in g retinem greutatile , in p profitul
int uz[5000][5000];
int d[5000];

void Citire()
{
    int i;
    fin>>n>>G;
    for(i=1;i<=n;i++)
     fin>>g[i]>>p[i];
}

void Rezolvare()
{
    int i,s,k;
    for(s=1;s<=G;s++) d[s]=-1;
    for(s=1;s<=G;s++)
     for(i=1;i<=n;i++)
      if(g[i]<=s && d[s-g[i]]!=-1 && !uz[s-g[i]][i])
       if(d[s]<p[i]+d[s-g[i]])
       {
           d[s]=p[i]+d[s-g[i]];
           for(k=1;k<=n;k++)
            uz[s][k]=uz[s-g[i]][k];
            uz[s][i]=1;
       }
}

void Afisare()
{
    if(d[G]==-1) fout<<"Imposibil";
    else
fout<<d[G]<<" ";

}

int main()
{

     Citire();
     Rezolvare();
     Afisare();
      return 0;
}