题目描述
示例1
输入: [[0,0,1,1],[1,0,1,0],[1,1,0,0]] 输出: 39 解释: 转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39
提示
题解
首先我们要明确一个显而易见的事实:
- 每一行、每一列要么不翻转,要么翻转一次,再多是等价的,没有意义。
二进制枚举
。
贪心
c++
classSolution { public: intmatrixScore(vector<vector<int>>&A) { intn=A.size(), m=A[0].size(); for (inti=0; i<n; ++i) { if (A[i][0]) continue; for (intj=0; j<m; ++j) { A[i][j] ^=1; } } intres= (1<<(m-1)) *n; for (intj=1; j<m; ++j) { intcnt=0; for (inti=0; i<n; ++i) { cnt+=A[i][j]; } cnt=max(cnt, n-cnt); res+= (1<<(m-1-j)) *cnt; } returnres; } };
作者简介:godweiyang,知乎同名,华东师范大学计算机系硕士在读,方向自然语言处理与深度学习。喜欢与人分享技术与知识,期待与你的进一步交流~