Pagini recente » Cod sursa (job #3198697) | Cod sursa (job #3132370) | Cod sursa (job #270916) | Cod sursa (job #904027) | Cod sursa (job #2467262)
#include <cstdio>
using namespace std;
int main()
{
int n, maxWeight, l=0;
int weight[5010], profit[5010];
int D[2][10010];
freopen("rucsac.in", "r", stdin);
freopen("rucsac.out", "w", stdout);
scanf("%d%d", &n, &maxWeight);
for(int i = 0; i < n; ++i)
scanf("%d%d", &weight[i], &profit[i]);
for(int i = 0; i < n; ++i, l = 1 - l)// l reprezinta pozitia prezenta, 1-l reprezinta pozitia veche
for(int currentWeight=0; currentWeight <= maxWeight ; ++currentWeight)
{
D[l][currentWeight] = D[1-l][currentWeight];
if(weight[i] <= currentWeight )
if( D[l][currentWeight] < D[1-l][currentWeight - weight[i]] + profit[i] )
D[l][currentWeight] = D[1-l][currentWeight - weight[i]] + profit[i];
}
l=1-l;//l = 1-l se mai apeleaza odata la sfarsitul forului deci l trebuie resetat la pozitia de mai inainte
printf("%d\n", D[l][maxWeight]);
return 0;
}