Cod sursa(job #1166649)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 3 aprilie 2014 18:51:27
Problema Problema rucsacului Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
// Problema Rucsacului - O(N*G)

#include <fstream>
#define Nmax 5009
#define Gmax 10009
using namespace std;
ifstream f("rucsac.in");
ofstream g("rucsac.out");

int N,G,gr[Nmax],p[Nmax],D[2][Gmax],k;

int main()
{
     f>>N>>G;
     for(int i=1;i<=N;++i)f>>gr[i]>>p[i];
     k=1;
     for(int i=1; i<=N ; ++i , k=1-k)
          for(int cap=0;cap<=G;++cap)
          {
               D[k][cap]=D[1-k][cap]; //nu fur obiectul i
               if(gr[i]<=cap) // daca pot sa bag obiectul i in ghiozdan
                    if(D[k][cap]<D[1-k][cap-gr[i]]+p[i])
                       D[k][cap]=D[1-k][cap-gr[i]]+p[i];
          }
     g<<D[k][G]<<'\n';
     f.close();g.close();
     return 0;
}