参考
原题
AC代码
#include<cstdio>
#include<iostream>
#include<bitset>
#include<algorithm>
#define MAX_C 10000
#define MAX_R 10
using namespace std;
bitset<MAX_C> s[MAX_R];
int r,c,ans;
void dfs(int k){
if(k==r){
int sum=0;
for(int i=0;i<c;++i){
int n=0;
for(int j=0;j<r;++j){
if(s[j][i])
++n;
}
sum+=max(n,r-n);
}
ans=max(ans,sum);
return;
}
dfs(k+1);
s[k].flip();
dfs(k+1);
}
void solve(){
ans=0;
dfs(0);
printf("%d\n",ans);
}
int main(){
while(~scanf("%d %d",&r,&c)&&r&&c){
for(int i=0;i<r;++i)
for(int j=0;j<c;++j){
bool temp;
scanf("%d",&temp);
s[i][j]=temp;
}
solve();
}
return 0;
}
总结
深搜似乎都忘得差不多了 太可怕了 这题的递归有点难理解…