拔河分组问题 python

拔河分组问题 python,第1张

题目:

拔河:

给定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))

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/883731.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-14
下一篇2022-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存