简要题意:
给出n行m列的0、1矩阵,每次操作可以将任意一行或一列反转,即这一行或一列中0变为1,1变为0。问通过任意多次这样的变换,最多可以使矩阵中有多少个1。
思路分析:
行数比较小,先不考虑对列的操作,将行数的所有情况举出来最多2^10种情况。对于已经固定了对行进行怎样的操作后,这种情况下对列的最优操作就是对每一列,如果此时1比0多就不变,不然就反转。实现在代码中就是一个for循环扫一遍。注意本题反转行、列采用bitset中的flip函数是非常合适的,因为每个数也不是1就是0,恰好符合位数。
参考代码:
1 #include2 #include 3 #include 4 5 using namespace std; 6 bitset<10000>bing[10];//建立bitset数组储存数据,方便反转行列 7 int main() 8 { 9 int hang,lie,i,j,ci,k,re=0;10 bool tem;11 while(cin>>hang>>lie&&hang>0)12 {13 re=0;14 for(i=0;i >tem;19 bing[i][j]=tem;20 }21 }22 ci=1<