在C ++中翻转二进制矩阵最多K次后的最大分数

在本教程中,我们将讨论一个程序,该程序在将Binary Matrix最多翻转K次后才能找到最大分数。

为此,我们将提供包含零和一的2D矩阵。我们的任务是将特定行或列中的值翻转最多K次。将二进制值转换为十进制,将它们加起来并找到最大和。

示例

#include <bits/stdc++.h>

using namespace std;

const int n = 3;

const int m = 4;

//从矩阵中找到最大和

int maxMatrixScore(int A[n][m], int K) {

   map<int, int> update;

   for (int i = 0; i < n; ++i) {

      if (A[i][0] == 0) {

         int ans = 0;

         for (int j = 1; j < m; ++j)

            ans = ans + A[i][j] * pow(2, m - j - 1);

            update[ans] = i;

         }

      }

      map<int, int>::iterator it = update.begin();

      while (K > 0 && it != update.end()) {

         int idx = it->second;

         for (int j = 0; j < m; ++j)

            A[idx][j] = (A[idx][j] + 1) % 2;

         it++;

         K--;

      }

      int ans = 0;

      for (int j = 0; j < m; ++j) {

         int zero = 0, one = 0;

         for (int i = 0; i < n; ++i) {

            A[i][j] == 0 ? zero++ : one++;

      }

      if (K > 0 && zero > one) {

         ans += zero * pow(2, m - j - 1);

         K--;

      }

      else

         ans += one * pow(2, m - j - 1);

   }

   return ans;

}

int main() {

   int A[n][m] = { { 0, 0, 1, 1 },{ 1, 0, 1, 0 },{ 1, 1, 0, 0 } };

   int K = 2;

   cout << maxMatrixScore(A, K);

   return 0;

}

输出结果

36

以上是 在C ++中翻转二进制矩阵最多K次后的最大分数 的全部内容, 来源链接: utcz.com/z/322205.html

回到顶部