AOJ_0525 Osenbei
問題
解法
解説みた。
縦の列はたかだか10列しかないので縦の反転をすべて試していく。
#include <cstdio> #include <algorithm> using namespace std; const int MAX_R = 10, MAX_C = 10000; int R, C; int senbei[MAX_R][MAX_C]; int count(){ int f, b; int res = 0; for(int i = 0; i < C; i++){ f = 0; b = 0; for(int j = 0; j < R; j++){ if(senbei[j][i] == 0) b++; else f++; } res += max(f, b); } return res; } int solve(int r){ if(r == R) return count(); int res; res = solve(r + 1); for(int i = 0; i < C; i++){ if(senbei[r][i] == 0) senbei[r][i] = 1; else senbei[r][i] = 0; } res = max(res, solve(r + 1)); return res; } int main(){ while(scanf("%d %d", &R, &C) && R){ for(int i = 0; i < R; i++) for(int j = 0; j < C; j++) scanf("%d", &senbei[i][j]); printf("%d\n", solve(0)); } return 0; }