Pagini recente » Monitorul de evaluare | Borderou de evaluare (job #975456) | Cod sursa (job #412490) | Monitorul de evaluare | Cod sursa (job #3336619)
#include <fstream>
#include <cstdint>
#include <vector>
#include <limits>
std::ifstream in("flip.in");
std::ofstream out("flip.out");
int main() {
std::size_t N, M;
in >> N >> M;
std::vector<std::vector<std::int32_t>> flip(N, std::vector<std::int32_t>(M));
for(std::size_t i = 0; i < N; ++i) {
for(std::size_t j = 0; j < M; ++j) {
in >> flip[i][j];
}
}
std::int64_t best_sum = std::numeric_limits<std::int64_t>::min();
for(std::int32_t mask = 0; mask < (1 << N); ++mask) {
std::int64_t current_sum = 0;
for(std::size_t column = 0; column < M; ++column) {
std::int64_t column_sum = 0;
for(std::size_t row = 0; row < N; ++row) {
std::int64_t value = flip[row][column];
if (mask & (1 << row)) {
value *= -1;
}
column_sum += value;
}
current_sum += std::abs(column_sum);
}
best_sum = std::max(best_sum, current_sum);
}
out << best_sum << '\n';
return 0;
}