Cod sursa(job #701062)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 1 martie 2012 13:23:22
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>

#define UNDEF -1

/* Un material este o pereche (greutate, valoare). */
typedef std::pair<int, int> Mobila;

int val_max(int t, std::vector<Mobila>& v)
{
  /* TODO: Caclulati valoarea maxima transportabila de catre camionul de
   * capacitate t. */

  std::vector <int> d;

  d.resize(t + 2);

  d[0] = 0;
  for(int i = 1; i < d.size(); i ++)
    d[i] = UNDEF;

  for(int i = 0; i < v.size(); i ++)
    for(int j = t; j > 0; j --)
      if(j - v[i].first >= 0 && d[j - v[i].first] != UNDEF)
        d[j] = std::max(d[j], (d[j - v[i].first] + v[i].second));

  int maxval = UNDEF;

  for(int i = 1; i <=t; i ++)
    maxval = std::max(maxval, d[i]);

  return maxval;
}

int main()
{
  /* Declaram capacitatea camionului si un vector care sa retina tipurile de
   * mobila sub forma de perechi (greutate, valoare) si citim datele de intrare.
   */
  int t, n;

  freopen("rucsac.in", "r", stdin);
  freopen("rucsac.out", "w", stdout);

  std::vector<Mobila> v;
  std::cin >> n;
  std::cin >> t;

  v.resize(n);

  for(int i = 0; i < n; i ++)
    std::cin >> (v[i].first) >> (v[i].second);

  /* Afisam valoarea maxima transportabila de catre camion. */
  std::cout << val_max(t, v) << std::endl;

  return 0;
}