From ed4734adeb278ceee879d77cf12393ba683ab41c Mon Sep 17 00:00:00 2001 From: Atharva Sarbhukan <87571344+s-atharva@users.noreply.github.com> Date: Thu, 24 Oct 2024 00:31:10 +0530 Subject: [PATCH 1/2] Create subset_sum_dp.py --- knapsack/subset_sum_dp.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 knapsack/subset_sum_dp.py diff --git a/knapsack/subset_sum_dp.py b/knapsack/subset_sum_dp.py new file mode 100644 index 000000000000..2eb0ff132342 --- /dev/null +++ b/knapsack/subset_sum_dp.py @@ -0,0 +1,34 @@ +def is_subset_sum_dp(arr, target): + # length + n = len(arr) + + # (n+1) x (target+1) DP table + dp = [] + for i in range(n + 1): + row = [] + for j in range(target + 1): + row.append(False) + dp.append(row) + + # Initialize the table: If target is 0, answer is True + for i in range(n + 1): + dp[i][0] = True + + # Fill the DP table + for i in range(1, n + 1): + for j in range(1, target + 1): + if arr[i-1] > j: + dp[i][j] = dp[i-1][j] + else: + dp[i][j] = dp[i-1][j] or dp[i-1][j - arr[i-1]] + + return dp[n][target] + +# Test cases +arr = [3, 34, 4, 12, 5, 2] +target = 9 +print(is_subset_sum_dp(arr, target)) # Output: True + +arr = [3, 34, 4, 12, 5, 2] +target = 30 +print(is_subset_sum_dp(arr, target)) # Output: False From 7efc19d6c117f149b85b8e52496ea272b2fea155 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 23 Oct 2024 19:02:37 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- knapsack/subset_sum_dp.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/knapsack/subset_sum_dp.py b/knapsack/subset_sum_dp.py index 2eb0ff132342..b01bba9043c4 100644 --- a/knapsack/subset_sum_dp.py +++ b/knapsack/subset_sum_dp.py @@ -1,7 +1,7 @@ def is_subset_sum_dp(arr, target): # length n = len(arr) - + # (n+1) x (target+1) DP table dp = [] for i in range(n + 1): @@ -17,13 +17,14 @@ def is_subset_sum_dp(arr, target): # Fill the DP table for i in range(1, n + 1): for j in range(1, target + 1): - if arr[i-1] > j: - dp[i][j] = dp[i-1][j] + if arr[i - 1] > j: + dp[i][j] = dp[i - 1][j] else: - dp[i][j] = dp[i-1][j] or dp[i-1][j - arr[i-1]] + dp[i][j] = dp[i - 1][j] or dp[i - 1][j - arr[i - 1]] return dp[n][target] + # Test cases arr = [3, 34, 4, 12, 5, 2] target = 9