https://leetcode.com/problems/score-after-flipping-matrix/
//贪心
class Solution {
public:
void FlipRow(vector<vector<int>>& A, int row)
{
for(int i=0; i<A[row].size(); i++){
A[row][i] = !A[row][i];
}
}
void FlipCol(vector<vector<int>>& A, int col)
{
for(int i=0; i<A.size(); i++){
A[i][col] = !A[i][col];
}
}
int CntColOne(vector<vector<int>>& A, int col)
{
int cnt = 0;
for(int i=0; i<A.size(); i++){
cnt += A[i][col];
}
return cnt;
}
int NumRow(vector<vector<int>>& A, int Row)
{
int ans = 0;
for(int x : A[Row]) ans = (ans<<1) +x;
return ans;
}
int matrixScore(vector<vector<int>>& A) {
if(A.empty()) return 0;
//首列置为1
for(int i=0; i<A.size(); i++){
if(A[i][0]==0){
FlipRow(A,i);
}
}
//每列1的个数大于0的个数
for(int i=0; i<A[0].size(); i++){
if(CntColOne(A,i)*2 < A.size()){
FlipCol(A, i);
}
}
int ans = 0;
//计算二进制的和
for(int i=0; i<A.size(); i++){
ans += NumRow(A, i);
}
return ans;
}
};