Pagini recente » Cod sursa (job #1685471) | Cod sursa (job #2108067) | Cod sursa (job #2948512) | Cod sursa (job #1101222) | Cod sursa (job #2075124)
#include <iostream>
#include <fstream>
#define N_MAX 5005
#define W_MAX 10005
using namespace std;
ifstream f("rucsac.in");
ofstream g("rucsac.out");
int dp[2][W_MAX], w[N_MAX], p[N_MAX], n, W;
void copyToFirst()
{
for(int i = 0; i <= W; i++)
dp[0][i] = dp[1][i];
}
int main()
{
f >> n >> W;
for(int i = 1; i <= n; i++)
f >> w[i] >> p[i];
for(int i = 1; i <= n; i++)
{
for(int j = 0; j <= W; j++)
if(dp[0][j])
if(j + w[i] <= W)
{
dp[1][j + w[i]] = max(dp[1][j + w[i]], dp[0][j] + p[i]);
}
dp[1][w[i]] = max(dp[1][w[i]], p[i]);
copyToFirst();
}
int rez = -1;
for(int i = 0; i <= n; i++)
rez = max(rez, dp[0][i]);
g << rez;
return 0;
}