Pagini recente » Cod sursa (job #125636) | Cod sursa (job #2198068) | Cod sursa (job #569058) | Cod sursa (job #1557390) | Cod sursa (job #2630856)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int n, gmax;
int main()
{
cin >> n >> gmax;
vector<int> greutate(n), profit(n);
for(int i = 0; i < n; i++)
cin >> greutate[i] >> profit[i];
vector<vector<int>> dp(2, vector<int>(gmax + 1));
int l = 0;
for (int i = 1; i <= n; i++, l=1-l)
{
for (int j = 1; j <= gmax; j++)
{
dp[l][j] = max(dp[l][j-1], dp[1-l][j]);
if (j >= greutate[1-l])
{
dp[l][j] = max(dp[l][j], dp[1-l][j - greutate[i-1]] + profit[i-1]);
}
}
}
cout << dp[1-l][gmax] << '\n';
}
/*
2 4
5 6
dp[2] = 4
dp[3] = 4
dp[i] = profitul maxim cu greutatea maxim i
*/