From f2a3d037441c4479efa2ce27aacebf0ab3770eb0 Mon Sep 17 00:00:00 2001 From: Aterolite24 Date: Tue, 21 May 2024 15:23:48 +0530 Subject: [PATCH 1/2] minor changes in docstring --- knapsack/knapsack_dp.py | 57 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 knapsack/knapsack_dp.py diff --git a/knapsack/knapsack_dp.py b/knapsack/knapsack_dp.py new file mode 100644 index 000000000000..cdaf389fda7d --- /dev/null +++ b/knapsack/knapsack_dp.py @@ -0,0 +1,57 @@ +def knapsack_dp(capacity: int, weights: list[int], values: list[int]) -> int: + """ + Returns the maximum value that can be put in a knapsack of a given capacity, + with each weight having a specific value. + + Uses a dynamic programming approach to solve the 0/1 Knapsack Problem. + + >>> capacity = 50 + >>> values = [60, 100, 120] + >>> weights = [10, 20, 30] + >>> knapsack_dp(capacity, weights, values) + 220 + + >>> capacity = 0 + >>> values = [60, 100, 120] + >>> weights = [10, 20, 30] + >>> knapsack_dp(capacity, weights, values) + 0 + + >>> capacity = 10 + >>> values = [10, 10, 10] + >>> weights = [5, 5, 5] + >>> knapsack_dp(capacity, weights, values) + 20 + + >>> capacity = 100 + >>> values = [60, 100, 120, 80, 30] + >>> weights = [10, 20, 30, 40, 50] + >>> knapsack_dp(capacity, weights, values) + 360 + + >>> capacity = 7 + >>> values = [1, 4, 5, 7] + >>> weights = [1, 3, 4, 5] + >>> knapsack_dp(capacity, weights, values) + 9 + """ + + n = len(weights) + dp = [[0 for _ in range(capacity + 1)] for _ in range(n + 1)] + + for i in range(1, n + 1): + for w in range(1, capacity + 1): + if weights[i - 1] <= w: + value_included = values[i - 1] + dp[i - 1][w - weights[i - 1]] + value_excluded = dp[i - 1][w] + dp[i][w] = max(value_included, value_excluded) + else: + dp[i][w] = dp[i - 1][w] + + return dp[n][capacity] + + +if __name__ == "__main__": + import doctest + + doctest.testmod() \ No newline at end of file From c3f6e665b20e71ad6e0ac9b2f250a864a27204ea Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 11:05:55 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- knapsack/knapsack_dp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/knapsack/knapsack_dp.py b/knapsack/knapsack_dp.py index cdaf389fda7d..ce1eb3fecb93 100644 --- a/knapsack/knapsack_dp.py +++ b/knapsack/knapsack_dp.py @@ -54,4 +54,4 @@ def knapsack_dp(capacity: int, weights: list[int], values: list[int]) -> int: if __name__ == "__main__": import doctest - doctest.testmod() \ No newline at end of file + doctest.testmod()