|
|
- """
- Jeffery Russell
- 12-1-18
- """
-
-
- def knapsack(V, W, capacity):
- """
- Dynamic programming implementation of the knapsack problem
-
- :param V: List of the values
- :param W: List of weights
- :param capacity: max capacity of knapsack
- :return: List of tuples of objects stolen in form (w, v)
- """
- choices = [[[] for i in range(capacity + 1)] for j in range(len(V) + 1)]
- cost = [[0 for i in range(capacity + 1)] for j in range(len(V) + 1)]
-
- for i in range(0, len(V)):
- for j in range(0, capacity + 1):
- if W[i] > j: # don't include another item
- cost[i][j] = cost[i -1][j]
- choices[i][j] = choices[i - 1][j]
- else: # Adding another item
- cost[i][j] = max(cost[i-1][j], cost[i-1][j - W[i]] + V[i])
- if cost[i][j] != cost[i-1][j]:
- choices[i][j] = choices[i - 1][j - W[i]] + [(W[i], V[i])]
- else:
- choices[i][j] = choices[i - 1][j]
- return choices[len(V) -1][capacity]
-
-
- def printSolution(S):
- """
- Takes the output of knapsack and prints it in a
- pretty format.
-
- :param S: list of tuples representing items stolen
- :return: None
- """
- print("Thief Took:")
- for i in S:
- print("Weight: " + str(i[0]) + "\tValue: \t" + str(i[1]))
-
- print()
- print("Total Value Stolen: " + str(sum(int(v[0]) for v in S)))
- print("Total Weight in knapsack: " + str(sum(int(v[1]) for v in S)))
-
-
- values = [99,1,1,1,1, 1,1]
- weights = [5,1,2,3,4,5,1]
- printSolution(knapsack(values, weights, 6))
|