分糖果
等价于:序列拆分为两个和相等的不连续的子序列问题
有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")