AtCoder ABC 096 B – Maximum Sum Python解説

スポンサーリンク

Maximum Sum

黒板に, 3 つの正の整数 A, B, C が書かれています. E869120 君は, 以下の操作を K 回行います.

黒板に書かれている整数のうち 1 つを選び, これを 2 倍した値に書き換える.

さて, K 回の操作を終えた後の, 黒板に書かれる整数の合計としてありうる最大の値はいくつでしょうか?

AtCoder Beginner Contest 「Maximum Sum」

整数の合計の最大値を求めたいので、A,B,Cの中で一番大きい数をK回2倍にし続けることになります。

x = list(map(int, input().split()))
k = int(input())

x = sorted(x, reverse=True)

for _ in range(k):
    x[0] *= 2
    
print(sum(x))

上記のコードでは一番大きい数が配列の先頭に来るようにソートをreverse=Trueにして降順にしています。先頭の数が一番大きいので、あとはK回2倍にしてあげれば整数の合計が最大化されます。

他にもmax関数を使った解き方もあります。

a, b, c = list(map(int, input().split()))
k = int(input())

print(a + b + c + max(a, b, c) * (2 ** k - 1))

AtCoderB問題

Posted by cheese