Pagini recente » Cod sursa (job #62246) | Cod sursa (job #1995021) | Cod sursa (job #539690) | Cod sursa (job #2512411) | Cod sursa (job #3149578)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
struct obiect {
int g, v; // g-greutate, v-valoare
}a[5001];
int n, gmax, dp[2][10001];
int main()
{
fin >> n >> gmax;
for (int i = 1; i <= n; i++)
fin >> a[i].g >> a[i].v;
// dp[i][j] - profitul maxim obtinut din submultimea primelor i numere cu greutatea j
int l = 0;
for (int i = 1; i <= n; i++, l = 1 - l) // l alterneaza intre 0 si 1
for (int j = 0; j <= gmax; j++) {
dp[1 - l][j] = dp[l][j]; // copiere de pe linia anterioara
if (a[i].g <= j) // maximul dintre situatia in care preluam solutia precedenta
// si cea in care adaugam la solutia j - a[i].g profitul din i
dp[1 - l][j] = max(dp[1 - l][j], dp[l][j - a[i].g] + a[i].v);
}
fout << dp[l][gmax];
return 0;
}