题目:https://www.nowcoder.com/questionTerminal/d2668179a15c49e4b1af2c31dc6fedb7
当时没分析出来是个贪心,上来就上了两个暴力,都不能全过kase/(ㄒoㄒ)/~~
//贪心
#include<bits/stdc++.h>
using namespace std;
int a[55][55];
int main() {
int m, n, k;
char str[50];
cin >> m >> n >> k;
for (int i = 0; i < m; i++) {
cin >> str;
for (int j = 0; j < n; j++)
a[i][j] = str[j] - '0';
}
while (k) {
vector<int> r(m);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] == 0) {
r[i]++;
}
}
}
vector<int> tempr;
for (int i = 0; i < r.size(); i++) {
if (k >= r[i] && k % 2 == r[i] % 2) {
tempr.push_back(i);
}
}
vector<int> tempc(n);
for (int j = 0; j < n; j++) {
for (int i : tempr) {
if (a[i][j] == 0)
tempc[j]++;
}
}
int idx = max_element(tempc.begin(), tempc.end()) - tempc.begin();
for (int i = 0; i < m; i++) {
a[i][idx] = !a[i][idx];
}
k--;
}
int ans = 0;
for (int i = 0; i < m; i++) {
int ok = 1;
for (int j = 0; j < n; j++) {
if (a[i][j] == 0) {
ok = 0;
break;
}
}
if (ok) ans++;
}
cout << ans << endl;
return 0;
}
//6 5 3
//10010
//11000
//01110
//00011
//10101
//11000