Cod sursa(job #3166862)

Utilizator andreic06Andrei Calota andreic06 Data 9 noiembrie 2023 18:15:06
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in ("rucsac.in");
ofstream out ("rucsac.out");

const int N_MAX = 5000;
const int G_MAX = 10000;

const int LINII = 2;

int gr[1 + N_MAX], profit[1 + N_MAX];
int maxProfit[LINII][1 + G_MAX];

const int IMPOSSIBLE = -1;
int main()
{
   int N, G;
   in >> N >> G;

   for (int i = 1; i <= N; i ++)
      in >> gr[i] >> profit[i];


   for (int g = 1; g <= G; g ++)
      maxProfit[0][g] = maxProfit[1][g] = IMPOSSIBLE;

   for (int i = 1; i <= N; i ++) {
      for (int g = 1; g <= G; g ++) {
         maxProfit[1][g] = maxProfit[0][g]; /// cazul in care nu il iau pe i
         if (gr[i] <= g && maxProfit[0][g - gr[i]] != IMPOSSIBLE) /// cazul in care il iau pe i
           if (maxProfit[1][g] < profit[i] + maxProfit[0][g - gr[i]])
             maxProfit[1][g] = profit[i] + maxProfit[0][g - gr[i]];
      }
      for (int g = 1; g <= G; g ++) {
         maxProfit[0][g] = maxProfit[1][g];
         maxProfit[1][g] = IMPOSSIBLE;
      }
   }


   int answer = 0;
   for (int g = 1; g <= G; g ++)
      answer = max (answer, maxProfit[0][g]);
   out << answer;
    return 0;
}