Pagini recente » Cod sursa (job #767791) | Cod sursa (job #1335666) | Cod sursa (job #1135968) | Cod sursa (job #2303277) | Cod sursa (job #2869424)
#include <bits/stdc++.h>
using namespace std;
ifstream cin("rucsac.in");
ofstream cout("rucsac.out");
int const N = 5001 , G = 10001;
int n , g;
int wi , pi;
int dp[N][G];
///dp[i][j]-> pt primele i obiecte , profitul maxim cu greutatea MAXIM j
int main()
{
cin >> n >> g;
for(int i = 0 ; i <= n ; ++ i)
for(int j = 0 ; j <= g ; ++ j)
dp[i][j] = -1;
dp[0][0] = 0;
for(int i = 1 ; i <= n ; ++ i){
cin >> wi >> pi;
for(int j = 0 ; j <= g ; ++ j){
dp[i][j] = dp[i - 1][j];
if(j - wi >= 0 && dp[i - 1][j - wi] != -1){
dp[i][j] = max(dp[i][j] , dp[i - 1][j - wi] + pi);
}
if(j != 0 && dp[i][j - 1] != -1) dp[i][j] = max(dp[i][j] , dp[i][j - 1]);
}
}
cout << *max_element(dp[n] , dp[n] + g + 1) << '\n';
return 0;
}