(可以把问题看成,在第0行都为1的情况下,使每一列的1尽可能多)
要分数最大,首先首位数字肯定要都是为1的,所以想法是先对所有的行进行变化,把A[i][0]不为0的行全部翻转。然后对所有的列进行操作,比较列中1和0 的个数,如果1比较多则不变,如果0比较多则对该列进行翻转。
class Solution {
public:
int matrixScore(vector<vector<int>>& A) {
int line=A.size();
int row=A[0].size();
for(int i=0;i<line;i++){
if(A[i][0]==0)
{
for(int j=0;j<row;j++)
A[i][j]=1-A[i][j];
}
}
int res=0;
res+=pow(2,row-1)*line;
for(int j=1;j<row;j++){
int countZero=0;
int countOne=0;
for(int i=0;i<line;i++){
if(A[i][j]==0){
countZero++;
}
else{
countOne++;
}
}
res+=pow(2,row-1-j)*max(countZero,countOne);
}
return res;
}
};