当前位置: 代码迷 >> 综合 >> AOJ0525 Osenbei(DFS+BITSET)
  详细解决方案

AOJ0525 Osenbei(DFS+BITSET)

热度:53   发布时间:2023-11-08 15:42:55.0

题意:药药!切克闹! 煎饼果子来一套!有一个烤饼器可以烤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;
}