educative.io

%modulo solution more confusing

imo using 2 arrays is a more straight forward solution:

static int solveKnapsack(int[] profits, int[] weights, int capacity) {
int[] dp = new int[capacity+1];
for(int i = 0; i<=capacity; i++)
{
  if(weights[0] <= i)
  {
    dp[i] = profits[0];
  }
}

for(int item = 1; item<weights.length; item++)
{
  int[] temp = new int[capacity+1];
  for(int w = 0; w<=capacity; w++)
  {
    if(weights[item] <= w) {
      temp[w] = Math.max(dp[w], profits[item] + dp[w-weights[item]]);
    } else {
      temp[w] = dp[w];
    }
  }
  dp = temp;
}
return dp[capacity];
  }