Pagini recente » Cod sursa (job #3178964) | Cod sursa (job #1708558) | Cod sursa (job #2955656) | Cod sursa (job #2580068) | Cod sursa (job #2683941)
#include <fstream>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
#define limn 5001
#define limg 10001
int w[limn], p[limn], n, G, dp[2][limg];
/**
x = cond ? x_val_condTrue : x_val_condFalse;
**/
/// dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+p[i])
/// res in dp[n][G]
int main()
{
fin>>n>>G;
for(int i = 1; i <= n; i++)
fin>>w[i]>>p[i];
int lin = 0;
///alternam linia 0 si 1
/// lin ^= 1 ( 0 ^ 1 = 1 , 1 ^ 1 = 0)
for(int i = 1; i <= n; i++, lin ^= 1)
for(int j = 0; j <= G; j++)
{
if(w[i] <= j)
dp[lin][j] = max(dp[lin^1][j], dp[lin^1][j-w[i]]+p[i]);
else
dp[lin][j] = dp[lin^1][j];
/// dp[i][j] = (w[i] <= j) ? max(dp[i-1][j], dp[i-1][j-w[i]]+p[i]) : dp[i-1][j];
}
fout<<dp[lin^1][G];
return 0;
}