Pagini recente » Cod sursa (job #2039562) | Cod sursa (job #637899) | Cod sursa (job #1151377) | Cod sursa (job #990941) | Cod sursa (job #2105121)
/// knapsack problem
#include <fstream>
#define NMax 5010
#define GMax 10010
///#define f cin
///#define g cout
using namespace std;
ifstream f("rucsac.in");
ofstream g("rucsac.out");
int n, G, w[NMax], p[NMax], dp[NMax][GMax];
int main()
{
f >> n >> G;
for(int i = 1; i <= n; ++i)
f >> w[i] >> p[i];
for(int i = 1; i <= n; ++i)
for(int j = 0; j <= G; ++j)
{
dp[i][j] = dp[i - 1][j];
if(j >= w[i]) dp[i][j] = max(dp[i][j], dp[i - 1][j - w[i]] + p[i]); /// daca greutatea e mai mic egala cu greutatea curenta atunci
/// atunci dp[i][j] devine maximul dintre el si valoarea diferentei dintre marimea curenta si greutatea obiectului de pe linia anterioara + profitul obiectului
}
g << dp[n][G] << '\n';
return 0;
}