logo

Maksimizēt N X N augšējās kreisās apakšmatricas summu no dotās 2N X 2N matricas

Ņemot vērā a 2N x 2N veselu skaitļu matrica. Jums ir atļauts apgriezt jebkuru rindu vai kolonnu neierobežotu skaitu reižu un jebkurā secībā. Uzdevums ir aprēķināt augšējās kreisās puses maksimālo summu N x N apakšmatrica, t.i., apakšmatricas elementu summa no (0 0) līdz (N - 1 N - 1).

Piemēri:  

Ievade: ar[][] = {



                    112 42 83 119

                    56 125 56 49

                    15 78 101 43

                    62 98 114 108

parādīt slēptās lietotnes

                  }

Izvade: 414

Dotās matricas izmērs ir 4 x 4, kas mums ir jāpalielina 

augšējās kreisās 2 X 2 matricas summa, t.i 

mats[0][0] + mats[0][1] + mats[1][0] + mats[1][1].

Sekojošās darbības palielina summu:

b plus koks

1. Apgrieziet 2. kolonnu otrādi

112 42 114 119

56 125 101 49

15 78 56 43

62 98 83 108

2. Apgrieztā 0. rinda

119 114 42 112

56 125 101 49

kad beidzas q1

15 78 56 43

62 98 83 108

Kreisās augšējās matricas summa = 119 + 114 + 56 + 125 = 414.

Lai maksimāli palielinātu augšējās kreisās apakšmatricas summu, katrai augšējās kreisās apakšmatricas šūnai ir četri kandidāti, kas nozīmē atbilstošās šūnas augšējā kreisajā augšējā labajā apakšējā-kreisajā un apakšējā labajā apakšmatricā, ar kurām to var apmainīt. 

Tagad novērojiet katru šūnu neatkarīgi no tā, kur tā atrodas, mēs varam to apmainīt ar atbilstošo kandidāta vērtību augšējā kreisajā apakšmatricā, nemainot citu šūnu secību augšējā kreisajā apakšmatricā. Diagramma parāda gadījumu, kad 4 kandidātu maksimālā vērtība ir augšējā labajā apakšmatricā. Ja tas atrodas apakšējā kreisajā vai apakšējā labajā apakšmatricā, mēs vispirms varam apgriezt rindu vai kolonnu, lai ievietotu to augšējā labajā apakšmatricā, un pēc tam sekot tādai pašai darbību secībai, kā parādīts diagrammā. 

kas ir java kaudze

Šajā matricā teiksim a26ir maksimālais no 4 kandidātiem un a23jāmaina ar a26nemainot šūnu secību augšējā kreisajā apakšmatricā.

matrica' title=

Apgrieztā rinda 2 
 

Maksimizēt N X N augšējās kreisās apakšmatricas summu no dotās 2N X 2N matricas


Reversā 2. kolonna 
 

Maksimizēt N X N augšējās kreisās apakšmatricas summu no dotās 2N X 2N matricas


Apgrieztā rinda 7 
 

Maksimizēt N X N augšējās kreisās apakšmatricas summu no dotās 2N X 2N matricas


Reversā 6. sleja 
 

b+ koks

Maksimizēt N X N augšējās kreisās apakšmatricas summu no dotās 2N X 2N matricas


Apgrieztā rinda 2 
 

Maksimizēt N X N augšējās kreisās apakšmatricas summu no dotās 2N X 2N matricas

Tālāk ir sniegta informācija par šīs pieejas īstenošanu. 

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> 

Izvade
414

Laika sarežģītība: O(N2).
Palīgtelpa: O(1) jo tas izmanto nemainīgu vietu mainīgajiem

 

Izveidojiet viktorīnu