题解 | #数组分组#
数组分组
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')
