logo

Maximizar la suma de la submatriz superior izquierda N X N de la matriz 2N X 2N dada

dado un 2N x 2N matriz de números enteros. Puede invertir cualquier fila o columna cualquier número de veces y en cualquier orden. La tarea es calcular la suma máxima de la esquina superior izquierda. N X N submatriz, es decir, la suma de elementos de la submatriz de (0 0) a (N - 1 N - 1).

Ejemplos:  

Aporte : con[][] = {



                    112 42 83 119

                    56 125 56 49

                    15 78 101 43

                    62 98 114 108

índice java de

                  }

Producción : 414

Dada la matriz es de tamaño 4 X 4 necesitamos maximizar 

la suma de la matriz superior izquierda 2 X 2, es decir 

la suma de mat[0][0] + mat[0][1] + mat[1][0] + mat[1][1].

Las siguientes operaciones maximizan la suma:

java lambda

1. Invierta la columna 2

112 42 114 119

56 125 101 49

15 78 56 43

62 98 83 108

2. Invertir fila 0

119 114 42 112

56 125 101 49

una forma completa

15 78 56 43

62 98 83 108

Suma de la matriz superior izquierda = 119 + 114 + 56 + 125 = 414.

Para maximizar la suma de la submatriz superior izquierda, observe que para cada celda de la submatriz superior izquierda hay cuatro candidatos, es decir, las celdas correspondientes en las submatrices superior izquierda, superior derecha, inferior izquierda e inferior derecha con las que se puede intercambiar. 

Ahora observe que para cada celda, dondequiera que esté, podemos intercambiarla con el valor candidato correspondiente en la submatriz superior izquierda sin cambiar el orden de las otras celdas en la submatriz superior izquierda. El diagrama muestra un caso en el que el valor máximo de los 4 candidatos está en la submatriz superior derecha. Si está en las submatrices inferior izquierda o inferior derecha, primero podemos invertir una fila o columna para colocarla en la submatriz superior derecha y luego seguir la misma secuencia de operaciones que se muestra en el diagrama. 

mysql no es igual

En esta matriz digamos un26es el máximo de los 4 candidatos y un23debe ser intercambiado con un26sin cambiar el orden de las celdas en la submatriz superior izquierda.

matriz' title=

Fila inversa 2 
 

Maximizar la suma de la submatriz superior izquierda N X N de la matriz 2N X 2N dada


Columna inversa 2 
 

Maximizar la suma de la submatriz superior izquierda N X N de la matriz 2N X 2N dada


Fila inversa 7 
 

Maximizar la suma de la submatriz superior izquierda N X N de la matriz 2N X 2N dada


Columna inversa 6 
 

números para el alfabeto

Maximizar la suma de la submatriz superior izquierda N X N de la matriz 2N X 2N dada


Fila inversa 2 
 

Maximizar la suma de la submatriz superior izquierda N X N de la matriz 2N X 2N dada

A continuación se muestra la implementación de este enfoque: 

C++
// C++ program to find maximum value of top N/2 x N/2 // matrix using row and column reverse operations #include    #define R 4 #define C 4 using namespace std; int maxSum(int mat[R][C]) {  int sum = 0;  for (int i = 0; i < R / 2; i++)  for (int j = 0; j < C / 2; j++) {  int r1 = i;  int r2 = R - i - 1;  int c1 = j;  int c2 = C - j - 1;  // We can replace current cell [i j]  // with 4 cells without changing affecting  // other elements.  sum += max(max(mat[r1][c1] mat[r1][c2])  max(mat[r2][c1] mat[r2][c2]));  }  return sum; } // Driven Program int main() {  int mat[R][C]  = { 112 42 83 119 56 125 56 49  15 78 101 43 62 98 114 108 };  cout << maxSum(mat) << endl;  return 0; } 
Java
// Java program to find maximum value of top N/2 x N/2 // matrix using row and column reverse operations class GFG {  static int maxSum(int mat[][])  {  int sum = 0;  int maxI = mat.length;  int maxIPossible = maxI - 1;  int maxJ = mat[0].length;  int maxJPossible = maxJ - 1;  for (int i = 0; i < maxI / 2; i++) {  for (int j = 0; j < maxJ / 2; j++) {  // We can replace current cell [i j]  // with 4 cells without changing affecting  // other elements.  sum += Math.max(  Math.max(mat[i][j]  mat[maxIPossible - i][j])  Math.max(mat[maxIPossible - i]  [maxJPossible - j]  mat[i][maxJPossible - j]));  }  }  return sum;  }  // Driven Program  public static void main(String[] args)  {  int mat[][] = { { 112 42 83 119 }  { 56 125 56 49 }  { 15 78 101 43 }  { 62 98 114 108 } };  System.out.println(maxSum(mat));  } } /* This Java code is contributed by Rajput-Ji*/ 
Python3
# Python3 program to find the maximum value # of top N/2 x N/2 matrix using row and # column reverse operations def maxSum(mat): Sum = 0 for i in range(0 R // 2): for j in range(0 C // 2): r1 r2 = i R - i - 1 c1 c2 = j C - j - 1 # We can replace current cell [i j] # with 4 cells without changing/affecting # other elements. Sum += max(max(mat[r1][c1] mat[r1][c2]) max(mat[r2][c1] mat[r2][c2])) return Sum # Driver Code if __name__ == '__main__': R = C = 4 mat = [[112 42 83 119] [56 125 56 49] [15 78 101 43] [62 98 114 108]] print(maxSum(mat)) # This code is contributed # by Rituraj Jain 
C#
// C# program to find maximum value // of top N/2 x N/2 matrix using row // and column reverse operations using System; class GFG {  static int R = 4;  static int C = 4;  static int maxSum(int[ ] mat)  {  int sum = 0;  for (int i = 0; i < R / 2; i++) {  for (int j = 0; j < C / 2; j++) {  int r1 = i;  int r2 = R - i - 1;  int c1 = j;  int c2 = C - j - 1;  // We can replace current cell [i j]  // with 4 cells without changing affecting  // other elements.  sum += Math.Max(  Math.Max(mat[r1 c1] mat[r1 c2])  Math.Max(mat[r2 c1] mat[r2 c2]));  }  }  return sum;  }  // Driven Code  public static void Main()  {  int[ ] mat = { { 112 42 83 119 }  { 56 125 56 49 }  { 15 78 101 43 }  { 62 98 114 108 } };  Console.Write(maxSum(mat));  } } // This code is contributed // by ChitraNayal 
PHP
 // PHP program to find maximum value  // of top N/2 x N/2 matrix using row  // and column reverse operations function maxSum($mat) { $R = 4; $C = 4; $sum = 0; for ($i = 0; $i < $R / 2; $i++) for ($j = 0; $j < $C / 2; $j++) { $r1 = $i; $r2 = $R - $i - 1; $c1 = $j; $c2 = $C - $j - 1; // We can replace current cell [i j] // with 4 cells without changing  // affecting other elements. $sum += max(max($mat[$r1][$c1] $mat[$r1][$c2]) max($mat[$r2][$c1] $mat[$r2][$c2])); } return $sum; } // Driver Code $mat = array(array(112 42 83 119) array(56 125 56 49) array(15 78 101 43) array(62 98 114 108)); echo maxSum($mat) . 'n'; // This code is contributed // by Mukul Singh ?> 
JavaScript
<script> // Javascript program to find maximum value of top N/2 x N/2 // matrix using row and column reverse operations    let R = 4;  let C = 4;    function maxSum(mat)  {  let sum = 0;    for (let i = 0; i < R / 2; i++) {  for (let j = 0; j < C / 2; j++) {  let r1 = i;  let r2 = R - i - 1;  let c1 = j;  let c2 = C - j - 1;    // We can replace current cell [i j]  // with 4 cells without changing affecting  // other elements.  sum += Math.max(Math.max(mat[r1][c1] mat[r1][c2])  Math.max(mat[r2][c1] mat[r2][c2]));  }  }    return sum;  }  // Driven Program  let mat = [[112 42 83 119]   [56 125 56 49]   [15 78 101 43]   [62 98 114 108]];  document.write(maxSum(mat));    // This code is contributed by avanitrachhadiya2155 </script> 

Producción
414

Complejidad del tiempo: O(N2).
Espacio auxiliar: O(1) ya que está usando espacio constante para variables

 

Crear cuestionario