C++ Program to Maximize sum of diagonal of a matrix by rotating all rows or all columns Last Updated : 27 Jan, 2022 Comments Improve Suggest changes Like Article Like Report Given a square matrix, mat[][] of dimensions N * N, the task is find the maximum sum of diagonal elements possible from the given matrix by rotating either all the rows or all the columns of the matrix by a positive integer. Examples: Input: mat[][] = { { 1, 1, 2 }, { 2, 1, 2 }, { 1, 2, 2 } }Output: 6 Explanation: Rotating all the columns of matrix by 1 modifies mat[][] to { {2, 1, 2}, {1, 2, 2}, {1, 1, 2} }. Therefore, the sum of diagonal elements of the matrix = 2 + 2 + 2 = 6 which is the maximum possible. Input: A[][] = { { -1, 2 }, { -1, 3 } }Output: 2 Approach: The idea is to rotate all the rows and columns of the matrix in all possible ways and calculate the maximum sum obtained. Follow the steps to solve the problem: Initialize a variable, say maxDiagonalSum to store the maximum possible sum of diagonal elements the matrix by rotating all the rows or columns of the matrix.Rotate all the rows of the matrix by a positive integer in the range [0, N - 1] and update the value of maxDiagonalSum.Rotate all the columns of the matrix by a positive integer in the range [0, N - 1] and update the value of maxDiagonalSum.Finally, print the value of maxDiagonalSum. Below is the implementation of the above approach: C++ // C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; #define N 3 // Function to find maximum sum of diagonal elements // of matrix by rotating either rows or columns int findMaximumDiagonalSumOMatrixf(int A[][N]) { // Stores maximum diagonal sum of elements // of matrix by rotating rows or columns int maxDiagonalSum = INT_MIN; // Rotate all the columns by an integer // in the range [0, N - 1] for (int i = 0; i < N; i++) { // Stores sum of diagonal elements // of the matrix int curr = 0; // Calculate sum of diagonal // elements of the matrix for (int j = 0; j < N; j++) { // Update curr curr += A[j][(i + j) % N]; } // Update maxDiagonalSum maxDiagonalSum = max(maxDiagonalSum, curr); } // Rotate all the rows by an integer // in the range [0, N - 1] for (int i = 0; i < N; i++) { // Stores sum of diagonal elements // of the matrix int curr = 0; // Calculate sum of diagonal // elements of the matrix for (int j = 0; j < N; j++) { // Update curr curr += A[(i + j) % N][j]; } // Update maxDiagonalSum maxDiagonalSum = max(maxDiagonalSum, curr); } return maxDiagonalSum; } // Driver code int main() { int mat[N][N] = { { 1, 1, 2 }, { 2, 1, 2 }, { 1, 2, 2 } }; cout<< findMaximumDiagonalSumOMatrixf(mat); return 0; } Output: 6 Time Complexity: O(N2) Auxiliary Space: O(1) Please refer complete article on Maximize sum of diagonal of a matrix by rotating all rows or all columns for more details! Comment More infoAdvertise with us Next Article C++ Program to Maximize sum of diagonal of a matrix by rotating all rows or all columns K kartik Follow Improve Article Tags : Greedy Matrix C++ Programs C++ DSA rotation +2 More Practice Tags : CPPGreedyMatrix Similar Reads C++ Program to Maximum sum of i*arr[i] among all rotations of a given array Given an array arr[] of n integers, find the maximum that maximizes the sum of the value of i*arr[i] where i varies from 0 to n-1. Examples: Input: arr[] = {8, 3, 1, 2} Output: 29 Explanation: Lets look at all the rotations, {8, 3, 1, 2} = 8*0 + 3*1 + 1*2 + 2*3 = 11 {3, 1, 2, 8} = 3*0 + 1*1 + 2*2 + 6 min read C++ Program to Modify a matrix by rotating ith row exactly i times in clockwise direction Given a matrix mat[][] of dimensions M * N, the task is to print the matrix obtained after rotating every ith row of the matrix i times in a clockwise direction. Examples: Input: mat[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}Output:1 2 36 4 58 9 7Explanation:The 0th row is rotated 0 times. Therefore, t 3 min read C++ Program to Find maximum element of each row in a matrix Given a matrix, the task is to find the maximum element of each row. Examples: Input : [1, 2, 3] [1, 4, 9] [76, 34, 21] Output : 3 9 76 Input : [1, 2, 3, 21] [12, 1, 65, 9] [1, 56, 34, 2] Output : 21 65 56 Approach : The approach is very simple. The idea is to run the loop for no_of_rows. Check each 2 min read C++ Program to Find maximum value of Sum( i*arr[i]) with only rotations on given array allowed Given an array, only rotation operation is allowed on array. We can rotate the array as many times as we want. Return the maximum possible summation of i*arr[i]. Examples :Â Â Input: arr[] = {1, 20, 2, 10} Output: 72 We can get 72 by rotating array twice. {2, 10, 1, 20} 20*3 + 1*2 + 10*1 + 2*0 = 72 I 4 min read C++ Program to Efficiently Compute Sums of Diagonals of a Matrix Given a 2D square matrix, find the sum of elements in Principal and Secondary diagonals. For example, consider the following 4 X 4 input matrix. A00 A01 A02 A03 A10 A11 A12 A13 A20 A21 A22 A23 A30 A31 A32 A33 The primary diagonal is formed by the elements A00, A11, A22, A33. Condition for Principal 3 min read Like