PythonでJOI難易度6を埋める #1

難易度5が前回で終わり,今回から難易度6に突入!!!!.思い込みの影響もあるかもしれないが,難易度5に比べると難しくなってるように感じる...

E - おせんべい

Rが小さいので縦のどこを操作するかで全探索する.横の操作の枚数は操作する行でのみ変化するので,互いに独立. O(2^{R} C)

from itertools import product

r, c = map(int, input().split())
state = [list(map(int, input().split())) for _ in range(r)]

ans = 0
for i in product([0, 1], repeat = r):
    tmp = 0
    rev_senbei = [0] * c
    for j in range(r):
        for k in range(c):
            if i[j] == state[j][k]:
                rev_senbei[k] += 1

    for j in rev_senbei:
        tmp += max(j, r - j)

    ans = max(ans, tmp)

print(ans)

参考にした記事