【競プロ】過去問精選100問「AtCoder Beginner Contest 095 C - Half and Half」解法
Free-PhotosによるPixabayからの画像

はじめに

このシリーズではレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】でまとめられている100問をPythonで解いています。

問題

AtCoder Beginner Contest 095 C - Half and Half

ポイント

この問題は全探索を用いて解くことができます。

ABピザを買う枚数を全探索します。ABピザは2枚でAピザ1枚、Bピザ1枚となるのでABピザの買う枚数の

パターンは、0枚からAピザBピザの必要枚数の内大きい方の枚数x2までの間で2枚ずつ増えていきます。

コード

def main():
    A, B, C, X, Y = map(int, input().split(" "))

    result = float('inf')

    for i in range(0, max(X, Y) * 2 + 1, 2):  # ABピザを買う枚数を全探索
        price_c = C * i
        x = max(X - i // 2, 0)  # ABピザをi枚買った時のAピザの残り必要枚数
        y = max(Y - i // 2, 0)  # ABピザをi枚買った時のBピザの残り必要枚数

        tmp = A * x + B * y + price_c  # 残りの必要なピザを買った場合のトータル金額
        if tmp < result:
            result = tmp

    print(result)


if __name__ == '__main__':
    main()
おすすめの記事