题解 | #数组分组#
数组分组
https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
import sys import math def solu_dfs(l1, l2, data, cha): if len(data) == 0 : # print(l1, l2) if math.fabs( sum(l1) - sum(l2) ) == cha : return True else : return False return solu_dfs(l1 + [data[0]], l2, data[1:], cha) or solu_dfs(l1, l2 + [data[0]], data[1:], cha) def solu2(l1, l2, data, target): if sum(l1) == target or sum(l2) == target: # # print("提前结束 ?", len(data), l1, l2) return True if len(data) == 0: if sum(l1) == target or sum(l2) == target: return True else : return False return solu2(l1 + [data[0]], l2, data[1:], cha) or solu_dfs(l1, l2 + [data[0]], data[1:], cha) for line in sys.stdin: a = int(line.strip()) data = list(map(int, input().strip().split())) d1, d2 , d3= [], [], [] # d1 -- 5 for i in data: if i % 5 == 0: d1.append(i) elif i % 3 ==0: d2.append(i) else : d3.append(i) #本差值是相对值, 应该可以算出来,但是 理解上稍稍差一点意思, 计算上也麻烦, 不能提前结束 cha = math.fabs( sum(d1) - sum(d2)) # 本差值,数组和目标的差值,是绝对值,可以提前结束 target = (sum(data)/2 - sum(d1)) if sum(d1) <= sum(d2) else (sum(data)/2 - sum(d2)) # if solu_dfs([],[], d3, cha): # print("true") # else : # print('false') if solu2([],[], d3, target): print("true") else : print('false')