def can_partition_array(nums): array_sum = sum(nums) if array_sum % 2 != 0: return False subset_sum = array_sum//2 dp = [[False for i in range(len(nums)+1)] for j in range(subset_sum + 1)] for i in range(0, len(nums) + 1): dp[0][i] = True for i in range(1, subset_sum + 1): for j in range(1, len(nums)+1): if nums[j - 1] > i: dp[i][j] = dp[i][j - 1] else: dp[i][j] = dp[i - nums[j - 1] ][j - 1] or dp[i][j - 1] return dp[subset_sum][len(nums)] # Driver code def main(): arr = [[3, 1, 1, 2, 2, 1], [1, 3, 7, 3], [1, 2, 3], [1, 2, 5], [1, 3, 4, 8], [1, 2, 3, 2, 3, 5], [1, 5, 3, 2, 3, 19, 3], [1, 2, 3, 5, 3, 2, 1]] for i in range(len(arr)): print(i + 1, ". Input array: ", arr[i], sep="") result = can_partition_array(arr[i]) print("\nCan we partition the array into equal sum arrays?: ", bool(result), sep="") print("-" * 100) if __name__ == '__main__': main()