题意:药药!切克闹! 煎饼果子来一套!有一个烤饼器可以烤r行c列的煎饼,煎饼可以正面朝上(用1表示)也可以背面朝上(用0表示)。一次可将同一行或同一列的煎饼全部翻转。现在需要把尽可能多的煎饼翻成正面朝上,问最多能使多少煎饼正面朝上?
输入:多组输入,每组第一行为二整数r, c (1 ≤ r ≤ 10, 1 ≤ c ≤ 10 000),剩下r行c列表示煎饼初始状态。r=c=0表示输入结束。
输出:对于每组输入,输出最多能使多少煎饼正面朝上
注意数据范围!!从这里联想到解题方法,顺带查阅bitset的相关资料! bitset的资料:https://blog.csdn.net/hallmeow/article/details/76162536
#include<iostream>
#include<algorithm>
#include<bitset>
using namespace std;
typedef long long ll;
ll n,m,ans,cnt,res,num; //n行m列
bool tmp;
bitset<10000> a[10];
void dfs(ll step){
if(step==n){
res=0;for(int j=0;j<m;j++){
//这里循环的次序分清楚 num=0;for(int i=0;i<n;i++){
if(!a[i][j]) num++; //统计0的数目 }res+=max(num,n-num);}ans=max(ans,res);return ;}//without flipdfs(step+1);//flipa[step].flip();dfs(step+1);
}
int main(){
while(cin>>n>>m){
if(n==0&&m==0) break;for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>tmp;a[i][j]=tmp;}}ans=0;dfs(0);cout<<ans<<endl;}return 0;
}