Cod sursa(job #2005704)

Utilizator costi2Radu Canu costi2 Data 27 iulie 2017 20:48:24
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>

using namespace std;

ifstream in("rucsac.in");
ofstream out("rucsac.out");
int max(int a,int b)
{
  return a > b ? a : b;
}
int N,G;
vector<pair<int,int> > vec;
void DP()
{
  int mat[N][G];
  for(int i = 0; i < N ;i++)
  {
    for(int j = 0; j < G;j++)
    {
      mat[i][j] = 0;
    }
  }
  for(int i = 0; i < N ;i++)
  {
    for(int j = 0; j < G;j++)
    {
      if(j == 0)
        continue;
      else if( i == 0)
      {
        mat[0][j] = vec[0].second;
      }
      else if(vec[i].first > j)
      {
          mat[i][j] = mat[i-1][j];
      }
      else
      {
        mat[i][j] = max(mat[i-1][j-vec[i-1].first]+ vec[i-1].second,mat[i-1][j]);
      }
    }
  }

  out<<mat[N-1][G-1];
}
struct Comp{
  bool operator()(pair<int,int> j,pair<int,int> i)
  {
    return j.first <= i.first;
  }
};
int main()
{
  in >> N >> G;
  int gr,val;
  pair<int,int> aux;
  for(int i = 0; i < N; i++)
  {
    in >> gr >> val;
    aux.first = gr; aux.second = val;
    vec.push_back(aux);
  }
//  sort(vec.begin(),vec.end(),Comp());
//  for(auto it :vec)
  //  cout<<it.first<<' '<<it.second<<'\n';
  DP();
  return 0;
}