在C ++中翻转矩阵后得分
假设我们有一个二维矩阵A,其中每个值均为0或1。这里的移动包括选择任何行或列,以及切换该行或列中的每个值:将所有0更改为1,并将所有1更改为0。现在,在进行任意数量的移动之后,此矩阵的每一行都被解释为二进制数,并且矩阵的得分是这些数字的总和。因此,我们的任务是找到最高分。如果输入像-
切换后输出为39,矩阵为-
所以数字是15+9+15=39
为了解决这个问题,我们将遵循以下步骤-
n:=行数和m:=列数
ret:=nx(2^(m–1))
对于1到m–1范围内的j
cnt:=cnt+A[i,j]=A[i,0]
cnt=0
对于i,范围为0至n–1
temp:=2^(m–j–1)*最大值cnt和n–cnt
ret:=ret+温度
返回ret
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h> using namespace std; class Solution { public: int matrixScore(vector<vector<int>>& A) { int n = A.size(); int m = A[0].size(); int ret = (1 << (m - 1)) * n; for(int j = 1; j < m; j++){ int cnt = 0; for(int i = 0; i < n; i++){ cnt += (A[i][j] == A[i][0]); } int temp = ((1 << (m - (j + 1))) * max(cnt, n - cnt)); ret += temp; } return ret; } }; main(){ vector<vector<int>> v = {{0,0,1,1},{1,0,1,0},{1,1,0,0}}; Solution ob; cout << (ob.matrixScore(v)); }
输入值
[[0,0,1,1],[1,0,1,0],[1,1,0,0]]
输出结果
39