The knapsack problem or rucksack problem is a problem in combinatorial optimization :
Given a set of items, each with a mass and a value, determine the
number of each item to include in a collection so that the total weight
is less than or equal to a given limit and the total value is as large
as possible. It derives its name from the problem faced by someone who
is constrained by a fixed-size knapsack and must fill it with the most valuable items.
This code is Knapsack problem with dynamic programming and recursive function.