题意:翻煎饼,只能横着翻或者竖着翻。问最多有多少朝上?
行只有10,所以枚举一下2^10的状态,每列取0或1中最大的一个。
在枚举外面把饼翻好,枚举里面指针指一下就好。(位运算或bitset乱搞
#include<bits/stdc++.h> using namespace std; const int maxn = 10000; int a[20][maxn]; int *b[10]; //#define LOCAL int main() { #ifdef LOCAL freopen("in.txt","r",stdin); #endif int R,C; while(scanf("%d%d",&R,&C), R){ for(int i = R; i--;){ for(int j = C; j--;){ scanf("%d",a[i]+j); a[i+R][j] = a[i][j]^1; } } int ans = 0; for(int S = 1<<R; --S >= 0;){ for(int i = 0; i < R; i++){ b[i] = a[i + (S>>i&1?R:0)]; } int cur = 0; //b[0] b[1] for(int j = 0; j < C; j++){ int cnt = 0; for(int i = 0; i < R; i++){ if(b[i][j]) cnt++; } cur += max(cnt,R-cnt); } ans = max(cur,ans); } printf("%d ",ans); } return 0; }