// 1975. Maximum Matrix Sum #include "leetcode.h" /* * you are given an 'n x n' integer 'matrix'. you can do the following operation * any number of times: choose any two adjacent elements of 'matrix' and * multiply each of them by -1. two elements are considered adjacent if and only * if they share a border. your goal is to maximise the summation of the * matrix's elements. return maximum sum of the matrix's elements using the * afforementioned operation. */ long long maxMatrixSum(int **matrix, int matrixSize, int *matrixColSize) { long long sum = 0; int neg_cnt = 0, min = INT_MAX; for (int i = 0; i < matrixSize; i++) for (int j = 0; j < matrixSize; j++) { if (matrix[i][j] < 0) neg_cnt++; if (abs(matrix[i][j]) < min) min = abs(matrix[i][j]); sum += abs(matrix[i][j]); } if (!(neg_cnt % 2)) return sum; return sum - (2 * min); } int main() { int m1i[2][2] = {{1, -1}, {-1, 1}}, m2i[3][3] = {{1, 2, 3}, {-1, -2, -3}, {1, 2, 3}}; struct two_d_arr *m1 = two_d_arr_init(2, 2, m1i); struct two_d_arr *m2 = two_d_arr_init(3, 3, m2i); printf("%lld\n", maxMatrixSum(m1->arr, m1->row_size, m1->col_size)); // expect: 4 printf("%lld\n", maxMatrixSum(m2->arr, m2->row_size, m2->col_size)); // expect: 16 two_d_arr_free(m1); two_d_arr_free(m2); }