Score After Flipping Matrix

给一个2d数组, 里面是0和1, 问怎么反转row和column, 值得所有row的和的值最大.

这题是贪婪算法, 首先找第一列中有0的, 翻转, 然后找第二列后边, 每列1比0少的, 翻转即可.

class Solution {
public:
    int matrixScore(vector<vector<int>>& A) {
        int n = A.size();
        int m = A[0].size();
        int res = 0;
        for(int i = 0; i < n; i++) {
            if(!A[i][0]){ // if the first column is zero
                for(int j = 0; j < m; j++){
                    A[i][j] = !A[i][j]; // flip rest numbers
                }
            }
        }
        for(int j = 1; j < m; j++) { // from second column
            int one = 0;
            int zero = 0;
            for(int i = 0; i < n; i++){
                if(A[i][j])
                    one++;
                else
                    zero++;
            }
            if(one < zero){ // if one less than zero
                for(int i = 0; i < n; i++){
                    A[i][j] = !A[i][j]; // flip
                }
            }
         }
        for(int i = 0; i < n; i++) { // calculate the result.
            int num = 0;
             for(int j = 0; j < m; j++){
                 num = (num << 1) | A[i][j] ;
             }
            res += num;
         }
        return res;
    }
};