AtCoder ABC 129 B – Balance Python解説

スポンサーリンク

Balance

1 から N の番号がついた N 個の重りがあり、番号 i の重りの重さは Wi です。
これらの重りを、番号が T 以下の重り と 番号が T より大きい重りの 2 グループに分けることを考え、
それぞれのグループの重さの和を S1​,S2​ とします。

このような分け方全てを考えた時、S1​ と S2​ の差の絶対値の最小値を求めてください。

AtCoder Beginner Contest 「」

グループに分ける際の分割位置を端から試していく。あとはmin関数で最小値になっているか確認すれば大丈夫です。

n = int(input())
w = list(map(int, input().split()))

ans = 10000

for i in range(n):
    s1 = sum(w[:i])
    s2 = sum(w[i:])
    ans = min(ans, abs(s1 - s2))
    
print(ans)

for文で分割位置を端から見ています。分割にはスライスを使うと簡単です。グループ分けをしたらsum関数でグループの重さの和を求め、最小値を更新しているか確認します。