JOI 2007 予選 E おせんべい (python)
R <= 10 なので bit全探索するやつ
XOR操作が出てくるので i を2進数表示したときの n 桁目を (i>>n)&1 であらわす。
全探索は行ごとでするのに、総和は列ごとに数えるのが面倒くさい。
numpy を使って転置するか、A.sum(axis=0) で列ごとに和を取っていくとよい。
np.count_nonzero(A,axis=0) を使いたかったが、python3.4.3だと count_nonzero に axis が導入されてなかった。
import numpy as np R,C = map(int,input().split()) S = np.array([list(map(int,input().split()))for _ in range(R)]) A = 0 for i in range(2**R): chk = 0 B = S.copy() for j,sj in enumerate(S): num = (i>>j)&1 B[j] = sj^num cnt = B.sum(axis=0) chk = np.maximum(cnt,R-cnt).sum() A = max(A,chk) print(A)