在本教程中,我们将讨论一个程序,该程序在将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