Pagini recente » Cod sursa (job #952588) | Cod sursa (job #3327766) | Cod sursa (job #3321714) | Cod sursa (job #1196524) | Cod sursa (job #3342197)
#include <algorithm>
#include <cstdio>
using namespace std;
const int NMAX = 20;
typedef long long int ll;
ll matrix[NMAX][NMAX], maximum_score, matrix_copy[NMAX][NMAX];
int solution[NMAX];
int lines, columns;
void print_solution(ll n) {
for (int i = 1; i <= n; i++) {
printf("%d ", solution[i]);
}
printf("\n");
}
void copy_matrix() {
for (int i = 1; i <= lines; i++) {
for (int j = 1; j <= columns; j++) {
matrix_copy[i][j] = matrix[i][j];
}
}
}
ll get_sum() {
ll result = 0;
for (int i = 1; i <= lines; i++)
for (int j = 1; j <= columns; j++)
result += matrix_copy[i][j];
return result;
}
ll get_score(int n, char type_flip) {
copy_matrix();
if (type_flip == 'C') {
for (int j = 1; j <= n; j++)
for (int i = 1; i <= lines; i++)
matrix_copy[i][solution[j]] *= -1;
for (int i = 1; i <= lines; i++) {
ll line_sum = 0;
for (int j = 1; j <= columns; j++)
line_sum += matrix_copy[i][j];
if (line_sum >= 0) continue;
for (int j = 1; j <= columns; j++)
matrix_copy[i][j] *= -1;
}
}
else {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= columns; j++) {
matrix_copy[solution[i]][j] *= -1;
}
}
for (int j = 1; j <= columns; j++) {
ll column_sum = 0;
for (int i = 1; i <= lines; i++) {
column_sum += matrix_copy[i][j];
}
if (column_sum >= 0) continue;
for (int i = 1; i <= lines; i++) {
matrix_copy[i][j] *= -1;
}
}
}
ll result = get_sum();
return result;
}
void submultimi(int &n, int position, char type_flip) {
if (n + 1 == position) return;
for (int i = solution[position - 1] + 1; i <= n; i++) {
solution[position] = i;
maximum_score = max(get_score(n, type_flip), maximum_score);
submultimi(n, position + 1, type_flip);
}
}
int main() {
freopen("flip.in", "r", stdin);
freopen("flip.out", "w", stdout);
scanf("%d %d", &lines, &columns);
for (int i = 1; i <= lines; i++)
for (int j = 1; j <= columns; j++)
scanf("%lld", &matrix[i][j]);
if (lines <= columns)
submultimi(lines, 1, 'L');
else
submultimi(columns, 1, 'C');
printf("%lld", maximum_score);
return 0;
}