1. 程式人生 > 遊戲 >為了玩上《艾爾登法環》 玩家吃了17天“被詛咒食物”

為了玩上《艾爾登法環》 玩家吃了17天“被詛咒食物”

等價於:序列拆分為兩個和相等的不連續的子序列問題

有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")