分糖果

等价于:序列拆分为两个和相等的不连续的子序列问题

有n袋糖果,分给两个小朋友,问能否平均分配,输入第一行表示糖果袋数,第二行表示每袋的糖果数量,答案可能有多种,只需输出一种,如果不能平均分配输出“-1”

样例1

输入

4
1 2 3 4

输出:

5
1 4
2 3

 

样例2

输入

5
7 4 5 3 3

输出:

11
7 4
5 3 3

 

样例3

输入

2
1 9

输出:

-1

 

 1 n = int(input())
 2 arr = list(map(int, input().split()))
 3 
 4 def find(i, ans, pre):
 5     if pre == mid:
 6         ans.append(-1)
 7     if i >=len(arr) or pre>mid or ans[-1] =='-1' : return
 8     ans[i] = 1
 9     pre += arr[i]
10     find(i+1, ans, pre)
11     if ans[-1]!=-1:
12         ans[i] = 0
13         pre -= arr[i]
14         find(i+1, ans, pre)
15 all = sum(arr)
16 if all%2!=0 or n<=1:
17     print('-1')
18 mid = all//2
19 ans = [0]*len(arr)
20 pre = 0
21 find(0, ans, pre)
22 if ans[-1] == -1:
23     print(mid)
24     print(" ".join(map(str, [arr[i] for i, k in enumerate(ans[:-1]) if k])))
25     print(" ".join(map(str, [arr[j] for j, k in enumerate(ans[:-1]) if k == 0])))
26 else:
27     print("-1")

 

posted @ 2022-04-15 11:46  浅忆~  阅读(115)  评论(0编辑  收藏  举报