Skip to content

Commit f2a3d03

Browse files
committed
minor changes in docstring
1 parent 0139143 commit f2a3d03

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

knapsack/knapsack_dp.py

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
def knapsack_dp(capacity: int, weights: list[int], values: list[int]) -> int:
2+
"""
3+
Returns the maximum value that can be put in a knapsack of a given capacity,
4+
with each weight having a specific value.
5+
6+
Uses a dynamic programming approach to solve the 0/1 Knapsack Problem.
7+
8+
>>> capacity = 50
9+
>>> values = [60, 100, 120]
10+
>>> weights = [10, 20, 30]
11+
>>> knapsack_dp(capacity, weights, values)
12+
220
13+
14+
>>> capacity = 0
15+
>>> values = [60, 100, 120]
16+
>>> weights = [10, 20, 30]
17+
>>> knapsack_dp(capacity, weights, values)
18+
0
19+
20+
>>> capacity = 10
21+
>>> values = [10, 10, 10]
22+
>>> weights = [5, 5, 5]
23+
>>> knapsack_dp(capacity, weights, values)
24+
20
25+
26+
>>> capacity = 100
27+
>>> values = [60, 100, 120, 80, 30]
28+
>>> weights = [10, 20, 30, 40, 50]
29+
>>> knapsack_dp(capacity, weights, values)
30+
360
31+
32+
>>> capacity = 7
33+
>>> values = [1, 4, 5, 7]
34+
>>> weights = [1, 3, 4, 5]
35+
>>> knapsack_dp(capacity, weights, values)
36+
9
37+
"""
38+
39+
n = len(weights)
40+
dp = [[0 for _ in range(capacity + 1)] for _ in range(n + 1)]
41+
42+
for i in range(1, n + 1):
43+
for w in range(1, capacity + 1):
44+
if weights[i - 1] <= w:
45+
value_included = values[i - 1] + dp[i - 1][w - weights[i - 1]]
46+
value_excluded = dp[i - 1][w]
47+
dp[i][w] = max(value_included, value_excluded)
48+
else:
49+
dp[i][w] = dp[i - 1][w]
50+
51+
return dp[n][capacity]
52+
53+
54+
if __name__ == "__main__":
55+
import doctest
56+
57+
doctest.testmod()

0 commit comments

Comments
 (0)