Pagini recente » Cod sursa (job #2546300) | Cod sursa (job #537012) | Cod sursa (job #1157276) | Cod sursa (job #2814691) | Cod sursa (job #3005699)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
typedef long long ll;
const int N = 5000 + 5, W = 1e4 + 5;
ll profit[N],weight[N];
// linia dp[i] - posibilele valori daca am lua obiectul i
ll dp[W];
int main()
{
int n,w; in>>n>>w;
for(int i=1;i<=n;i++)
in>>weight[i]>>profit[i];
dp[weight[1]] = profit[1];
ll gMAX = weight[1];
for(int i=2;i<=n;i++)
{
//cazuri generale
for(int j= gMAX; j>=1;j--)
if(dp[j] && dp[j] + profit[i] > dp[j+weight[i]] && j+weight[i] <= w)
{
dp[j+weight[i]] = dp[j] + profit[i];
gMAX = max(gMAX,j+weight[i]);
}
//cazul in care punem doar obiectul i in rucsac
dp[weight[i]] = max(dp[weight[i]],profit[i]);
}
ll profitMAX = -1;
for(int i=1;i<=w;i++) profitMAX = max(profitMAX,dp[i]);
out<<profitMAX;
}