Write a method named knapsack01
that solves the classic "0-1 knapsack problem" using dynamic programming.
The idea is that given a collection of items of given weights and values, and a knapsack of a given capacity, you must find the optimal way to place items into the knapsack without exceeding its weight capacity that produces the maximal total value.
Your method accepts three parameters:
an array of integers representing the items' weights,
an array of integers representing the items' values,
and an integer value W representing the total weight that can fit in the knapsack.
Your method should return the largest value we can make using elements in the array without exceeding the total weight of W.
For example, if the array contains weights of {10, 20, 30, 40}
and values of {60, 100, 120, 150}
, and the knapsack's max weight W is 50
, the optimal subset is {20, 30}
having a total value of 100 + 120 = 220, so your method should return 220
.
You may assume that no item in the array has a negative weight or value.
You must solve this problem using a bottom-up dynamic programming approach.
Do not use recursion.
You are allowed to construct any data structures (array, list, set, map, etc.) necessary to store the data for your dynamic programming algorithm.