logo

Maximieren Sie die Summe von N x N der oberen linken Untermatrix aus der gegebenen 2N x 2N-Matrix

Gegeben a 2N x 2N Matrix aus ganzen Zahlen. Sie können jede Zeile oder Spalte beliebig oft und in beliebiger Reihenfolge umkehren. Die Aufgabe besteht darin, die maximale Summe der oberen linken zu berechnen N X N Submatrix, d. h. die Summe der Elemente der Submatrix von (0 0) bis (N - 1 N - 1).

Beispiele:  

Eingabe: mit[][] = {



                    112 42 83 119

                    56 125 56 49

                    15 78 101 43

                    62 98 114 108

Alpha-Beta-Beschneidung

                  }

Ausgabe : 414

Die gegebene Matrix hat die Größe 4 x 4, die wir maximieren müssen 

die Summe der oberen linken 2 x 2-Matrix, d. h 

die Summe von mat[0][0] + mat[0][1] + mat[1][0] + mat[1][1].

Folgende Operationen maximieren die Summe:

1. Kehren Sie die Spalte 2 um

112 42 114 119

56 125 101 49

15 78 56 43

62 98 83 108

2. Reihe 0 umdrehen

119 114 42 112

Konvertieren von int in Double Java

56 125 101 49

15 78 56 43

62 98 83 108

Summe der oberen linken Matrix = 119 + 114 + 56 + 125 = 414.

Um die Summe der Submatrix oben links zu maximieren, beachten Sie, dass es für jede Zelle der Submatrix oben links vier Kandidaten gibt, d. h. die entsprechenden Zellen in den Submatrizen oben links, oben rechts, unten links und unten rechts, mit denen sie ausgetauscht werden kann. 

Beachten Sie nun, dass wir jede Zelle, wo auch immer sie sich befindet, mit dem entsprechenden Kandidatenwert in der Submatrix oben links austauschen können, ohne die Reihenfolge der anderen Zellen in der Submatrix oben links zu ändern. Das Diagramm zeigt einen Fall, in dem sich der Maximalwert der 4 Kandidaten in der Submatrix oben rechts befindet. Wenn es sich in den Untermatrizen unten links oder unten rechts befindet, können wir zunächst eine Zeile oder Spalte umkehren, um sie in die Untermatrix oben rechts einzufügen, und dann der gleichen Abfolge von Operationen folgen, wie im Diagramm gezeigt. 

In dieser Matrix sagen wir a26ist das Maximum der 4 Kandidaten und a23muss mit a getauscht werden26ohne die Reihenfolge der Zellen in der Submatrix oben links zu ändern.

Matrix' title=

Reihe 2 umkehren 
 

Namenskonvention Java

Maximieren Sie die Summe von N x N der oberen linken Untermatrix aus der gegebenen 2N x 2N-Matrix


Spalte 2 umkehren 
 

Maximieren Sie die Summe von N x N der oberen linken Untermatrix aus der gegebenen 2N x 2N-Matrix


Reihe 7 umkehren 
 

Maximieren Sie die Summe von N x N der oberen linken Untermatrix aus der gegebenen 2N x 2N-Matrix


Spalte 6 umkehren 
 

Maximieren Sie die Summe von N x N der oberen linken Untermatrix aus der gegebenen 2N x 2N-Matrix


Reihe 2 umkehren 
 

Maximieren Sie die Summe von N x N der oberen linken Untermatrix aus der gegebenen 2N x 2N-Matrix

Nachfolgend finden Sie die Umsetzung dieses Ansatzes: 

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> 

Ausgabe
414

Zeitkomplexität: O(N2).
Hilfsraum: O(1) da es konstanten Platz für Variablen verwendet

 

Quiz erstellen