【競プロ】過去問精選100問「パ研杯2019 C - カラオケ」解法
Free-PhotosによるPixabayからの画像

はじめに

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

問題

パ研杯2019 C - カラオケ

ポイント

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

全ての曲の選び方を試して、その場合の生徒のスコアを計算し、最大値を出力します。

コード

def main():
    N, M = map(int, input().split(" "))
    scores_list = []
    sums_list = []

    # 各生徒のスコアリスト作成
    for i in range(N):
        scores = [int(j) for j in input().split(" ")]
        scores_list.append(scores)
    
    # 曲の選び方のパターンを全探索
    for i in range(M-1):
        for j in range(i+1, M):
            scores_sum = 0  # 選曲パターンにおける生徒スコアの合計
            for scores in scores_list:
                if scores[i] >= scores[j]:  # 点数が高い方を採用
                    scores_sum += scores[i]
                else:
                    scores_sum += scores[j]
            sums_list.append(scores_sum)

    print(max(sums_list))

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