0/1 Knapsack ============ 1) Table: weights [1,3,4,5], values [1,4,5,7], capacity 7. dp[i][w] = best value with the first i items w = 0 1 2 3 4 5 6 7 none 0 0 0 0 0 0 0 0 item 1 0 1 1 1 1 1 1 1 item 2 0 1 1 4 5 5 5 5 item 3 0 1 1 4 5 6 6 9 item 4 0 1 1 4 5 7 8 9 answer = dp[4][7] = 9 (weights 3 + 4, values 4 + 5) 2) One row, capacity loop direction: weights [5,4,6,3], values [10,40,30,50], capacity 10 backward loop (each item used once) -> 90 forward loop, same code otherwise -> 150 (the weight-3 item is reused three times: 3 x 50) 3) Calls made: 22 items, capacity 60, best value 357 naive recursion -> 1003985 calls memoized -> 1794 calls