ブルーブリッジカップ分配マスク


目次
  • 問題説明
  • 構想分析及びコード実現

  • 問題の説明
    ある市の市長はマスクをいくつか獲得し、マスクの数を指定し、市長は市内の2つの病院にマスクを割り当てる.
    masks = [9090400, 8499400, 5926800, 8547000, 4958200, 4422600, 5751200, 4175600, 6309600, 5865200, 6604400, 4635000, 10663400, 8087200, 4554000]
    物流の制限のため、マスクはすべての病院に割り当てるしかありません.
    市長は2つの病院が獲得したマスクの総数の差が小さいほど良いことを望んでいる.
    この差の最小値を計算してください.
    【回答提出】
    これは結果を記入する問題で、結果を算出して提出すればいいだけです.
    本題の結果は1つの整数で、解答を提出する時にこの整数だけを記入して、余分な内容を記入して得点することができません.
    構想分析とコード実現
    ここでpython内蔵モジュールitertoolsのcombinationsメソッドを用いてmasksを7個の数で全配列し、合計で2回7個の数を減算した和の絶対値が差値であり、最小差値を求めればよい
    import itertools
    masks = [9090400, 8499400, 5926800, 8547000, 4958200, 4422600, 5751200, 4175600, 6309600, 5865200, 6604400, 4635000, 10663400, 8087200, 4554000]
    text = list(itertools.combinations(masks, len(masks)//2))
    total = sum(masks)
    ans = abs(total-sum(text[0])-sum(text[0]))
    for i in text:
        cha = abs(total-sum(i)-sum(i))
        ans = min(ans, cha)
    print(ans)