在C ++中翻转矩阵后得分
假设我们有一个二维矩阵A,其中每个值均为0或1。这里的移动包括选择任何行或列,以及切换该行或列中的每个值:将所有0更改为1,并将所有1更改为0。现在,在进行任意数量的移动之后,此矩阵的每一行都被解释为二进制数,并且矩阵的得分是这些数字的总和。因此,我们的任务是找到最高分。如果输入像-
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 |
所以数字是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
以上是 在C ++中翻转矩阵后得分 的全部内容, 来源链接: utcz.com/z/348881.html