Pagini recente » Cod sursa (job #360137) | Cod sursa (job #634212) | Cod sursa (job #581425) | Cod sursa (job #1646477) | Cod sursa (job #2699307)
#include <fstream>
#include <cstdio>
using namespace std;
ifstream cin ( "rucsac.in" );
ofstream cout ( "rucsac.out" );
#define MAXG 10000
#define MAXN 5000
int dp[2][MAXG + 1], valoare[MAXN], greutate[MAXN];
int main()
{
int i, n, g, j;
cin >> n >> g;
for ( i = 0; i < n; i++ ) {
cin >> greutate[i] >> valoare[i];
}
for ( i = 0; i < n; i++ ) {
for ( j = 0; j <= g; j++ ) {
dp[i % 2][j] = dp[(i - 1 + 2) % 2][j];
/// daca putem pune obiectul i
if ( greutate[i] <= j )
dp[i % 2][j] = max ( dp[i % 2][j], dp[(i - 1 + 2) % 2][j - greutate[i]] + valoare[i] );
}
}
cout << dp[(n - 1) % 2][g];
return 0;
}