在C ++中翻转矩阵后得分

假设我们有一个二维矩阵A,其中每个值均为0或1。这里的移动包括选择任何行或列,以及切换该行或列中的每个值:将所有0更改为1,并将所有1更改为0。现在,在进行任意数量的移动之后,此矩阵的每一行都被解释为二进制数,并且矩阵的得分是这些数字的总和。因此,我们的任务是找到最高分。如果输入像-

0011
1010
1100

切换后输出为39,矩阵为-

1111
1001
1111

所以数字是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

    回到顶部