logo

Maximera summan av N X N övre vänstra delmatrisen från given 2N X 2N matris

Givet a 2N x 2N matris av heltal. Du får vända vilken rad eller kolumn som helst hur många gånger som helst och i vilken ordning som helst. Uppgiften är att beräkna den maximala summan av det övre vänstra N X N submatris dvs summan av element i submatrisen från (0 0) till (N - 1 N - 1).

Exempel:  

Ingång: med[][] = {



                    112 42 83 119

math.random java

                    56 125 56 49

                    15 78 101 43

                    62 98 114 108

                  }

Utgång: 414

Den givna matrisen är av storlek 4 X 4 vi behöver maximera 

summan av övre vänstra 2 X 2-matrisen, dvs 

summan av mat[0][0] + mat[0][1] + mat[1][0] + mat[1][1].

Följande operationer maximerar summan:

hur man läser från en csv-fil i java

1. Vänd på kolumnen 2

112 42 114 119

56 125 101 49

15 78 56 43

62 98 83 108

2. Vänd rad 0

119 114 42 112

56 125 101 49

15 78 56 43

62 98 83 108

Summan av övre vänstra matrisen = 119 + 114 + 56 + 125 = 414.

För att maximera summan av den övre vänstra submatrisen observera för varje cell i den övre vänstra submatrisen finns det fyra kandidater, vilket betyder att motsvarande celler i den övre vänstra övre högra nedre vänstra och nedre högra submatrisen kan bytas ut med. 

Observera nu för varje cell var den än är att vi kan byta ut den med motsvarande kandidatvärde i den övre vänstra submatrisen utan att ändra ordningen på de andra cellerna i den övre vänstra submatrisen. Diagrammet visar för ett exempel där det maximala värdet för de 4 kandidaterna finns i den övre högra submatrisen. Om det är i den nedre vänstra eller den nedre högra submatrisen kan vi först vända en rad eller kolumn för att placera den i den övre högra submatrisen och sedan följa samma sekvens av operationer som visas i diagrammet. 

byt ut en färg i gimp

Låt säga a i denna matris26är det maximala av de 4 kandidaterna och en23måste bytas ut mot en26utan att ändra ordningen på cellerna i den övre vänstra submatrisen.

matris' title=

Vänd rad 2 
 

Maximera summan av N X N övre vänstra delmatrisen från given 2N X 2N matris


Omvänd kolumn 2 
 

Maximera summan av N X N övre vänstra delmatrisen från given 2N X 2N matris


Vänd rad 7 
 

Maximera summan av N X N övre vänstra delmatrisen från given 2N X 2N matris


Omvänd kolumn 6 
 

Maximera summan av N X N övre vänstra delmatrisen från given 2N X 2N matris


Vänd rad 2 
 

Maximera summan av N X N övre vänstra delmatrisen från given 2N X 2N matris

Nedan följer implementeringen av detta tillvägagångssätt: 

fråga ett klick
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> 

Produktion
414

Tidskomplexitet: O(N2).
Hjälputrymme: O(1) eftersom det använder konstant utrymme för variabler

 

Skapa frågesport