这道题在挑战程序设计竞赛上面被分为穷竭搜索,思路是,先看数据规模,先对行进行DFS,然后枚举每一列,即可。
#include <cstdio>
int m, n, matrix[20][10010], res;
void DFS(int index)
{
if(index == m){
int total = 0;
for(int i = 0; i < n; i++){
int temp = 0;
for(int j = 0; j < m; j++){
if(matrix[j][i]) temp++;
}
if(temp <= m / 2) temp = m - temp;
total += temp;
}
if(total > res) res = total;
return;
}
DFS(index + 1);
for(int i = 0; i < n; i++){
if(matrix[index][i]) matrix[index][i]--;
else matrix[index][i]++;
}
DFS(index + 1);
}
int main()
{
while(scanf("%d%d", &m, &n) != EOF){
if(!m && !n) break;
res = 0;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
scanf("%d", &matrix[i][j]);
if(matrix[i][j]) res++;
}
}
DFS(0);
printf("%d\n", res);
}
return 0;
}