From dbd86c19926f4b07d802f3593a7d5f8c4a50038d Mon Sep 17 00:00:00 2001 From: amika180 <22bcs14180@cuchd.in> Date: Mon, 9 Jun 2025 21:49:23 +0530 Subject: [PATCH] partitioning souvenirs.py --- .../partitioning souvenirs.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 week6_programming_challenges/partitioning souvenirs.py diff --git a/week6_programming_challenges/partitioning souvenirs.py b/week6_programming_challenges/partitioning souvenirs.py new file mode 100644 index 0000000..8fc133f --- /dev/null +++ b/week6_programming_challenges/partitioning souvenirs.py @@ -0,0 +1,30 @@ +from sys import stdin + +def partition3(values): + total_sum = sum(values) + + if total_sum % 3 != 0: + return 0 + + target_sum = total_sum // 3 + n = len(values) + + dp = [[[False] * (target_sum + 1) for _ in range(target_sum + 1)] for _ in range(n + 1)] + dp[0][0][0] = True + + for i in range(1, n + 1): + num = values[i - 1] + for j in range(target_sum + 1): + for k in range(target_sum + 1): + dp[i][j][k] = dp[i-1][j][k] + if j >= num: + dp[i][j][k] = dp[i][j][k] or dp[i-1][j-num][k] + if k >= num: + dp[i][j][k] = dp[i][j][k] or dp[i-1][j][k-num] + + return 1 if dp[n][target_sum][target_sum] else 0 + +if __name__ == '__main__': + input_n, *input_values = list(map(int, stdin.read().split())) + assert input_n == len(input_values) + print(partition3(input_values))