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;
}