Pagini recente » Borderou de evaluare (job #1657897) | Borderou de evaluare (job #971483) | Borderou de evaluare (job #336873) | Borderou de evaluare (job #2160867) | Cod sursa (job #3166862)
#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;
}