题目:
拔河:
给定2N个人,按体重分成2组每组N个人,使2组人体重尽可能相
差最小。
输入:每个人的体重,
输出:A组体重之和,B组体重之和。
def fen_zu(arr):
l = len(arr)
arr = sorted(arr)
half = int(l/2)
first = 0
second = 0
for i in range(0,half-1,2):
first += (arr[i] + arr[-i-1])
second += (arr[i+1] + arr[-i-2])
if half % 2 == 0:
return first, second
else:
small = arr[half -1]
big = arr[half]
if first <= second:
first += big
second += small
else:
first += small
second += big
return first, second
def fen_zu2(arr):
l = len(arr)
arr = sorted(arr)
half = int(l/2)
first = arr[0] + arr[-1]
second = arr[1] + arr[-2]
for i in range(2,half-1,2):
ga = (arr[i] + arr[-i-1])
gb = (arr[i+1] + arr[-i-2])
big = max(ga, gb)
small = min(ga, gb)
if first >= second:
first += small
second += big
else:
first += big
second += small
# print(half)
if half % 2 == 0:
return first, second
else:
small = arr[half -1]
big = arr[half]
if first <= second:
first += big
second += small
else:
first += small
second += big
return first, second
if __name__ == "__main__":
arr = [1, 2, 3, 4]
print(fen_zu2(arr))
arr = [1, 2, 3, 4, 6, 5]
print(fen_zu2(arr))
arr = [31, 39, 54, 30, 42, 49, 44, 35, 41, 36, 49, 33, 48, 32, 49, 49, 39, 48, 43, 38]
print(fen_zu2(arr))



