在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