logo

Maksimaliai padidinkite N X N viršutinės kairiosios matricos sumą iš pateiktos 2N X 2N matricos

Atsižvelgiant į a 2N x 2N sveikųjų skaičių matrica. Galite apversti bet kurią eilutę ar stulpelį bet kokį skaičių kartų ir bet kokia tvarka. Užduotis yra apskaičiuoti didžiausią viršutinio kairiojo kampo sumą N X N submatrica, ty submatricos elementų suma nuo (0 0) iki (N - 1 N - 1).

Pavyzdžiai:  

Įvestis: su[][] = {



                    112 42 83 119

katrina kaif

                    56 125 56 49

                    15 78 101 43

                    62 98 114 108

                  }

Išvestis: 414

Pateikta matrica yra 4 x 4 dydžio, kurią turime padidinti 

viršutinės kairiosios 2 X 2 matricos suma t.y 

matas[0][0] + matas[0][1] + matas[1][0] + matas[1][1].

Šios operacijos padidina sumą:

python išsaugokite json faile

1. Apverskite 2 stulpelį

112 42 114 119

56 125 101 49

15 78 56 43

62 98 83 108

2. Apverskite 0 eilutę

119 114 42 112

56 125 101 49

15 78 56 43

62 98 83 108

Viršutinės kairiosios matricos suma = 119 + 114 + 56 + 125 = 414.

Norėdami maksimaliai padidinti viršutinės kairiosios submatricos sumą, stebėkite kiekvieną viršutinės kairiosios submatricos langelį, kad yra keturi kandidatai, reiškiantys atitinkamas ląsteles viršutiniame kairiajame viršutiniame dešiniajame apatiniame kairiajame ir apatiniame dešiniajame submatricose, su kuriomis ji gali būti pakeista. 

Dabar stebėkite kiekvieną langelį, kad ir kur jis būtų, galime sukeisti jį atitinkama kandidato verte viršutinėje kairėje submatricoje, nekeisdami kitų langelių tvarkos viršutinėje kairėje submatricoje. Diagrama rodo atvejį, kai didžiausia 4 kandidatų vertė yra viršutinėje dešinėje submatricoje. Jei jis yra apatinėje kairėje arba apačioje dešinėje submatricose, pirmiausia galime apversti eilutę arba stulpelį, kad įdėtume ją į viršutinę dešinę pomatricą, o tada atlikite tą pačią operacijų seką, kaip parodyta diagramoje. 

nuorodų duomenų tipai java

Šioje matricoje tarkime a26yra didžiausias iš 4 kandidatų ir a23turi būti pakeistas į a26nekeičiant langelių tvarkos viršutinėje kairėje submatricoje.

matrica' title=

Atvirkštinė 2 eilutė 
 

Maksimaliai padidinkite N X N viršutinės kairiosios matricos sumą iš pateiktos 2N X 2N matricos


Atvirkštinis 2 stulpelis 
 

Maksimaliai padidinkite N X N viršutinės kairiosios matricos sumą iš pateiktos 2N X 2N matricos


Atvirkštinė 7 eilutė 
 

Maksimaliai padidinkite N X N viršutinės kairiosios matricos sumą iš pateiktos 2N X 2N matricos


Atvirkštinis 6 stulpelis 
 

eilutę į sveikąjį skaičių java

Maksimaliai padidinkite N X N viršutinės kairiosios matricos sumą iš pateiktos 2N X 2N matricos


Atvirkštinė 2 eilutė 
 

Maksimaliai padidinkite N X N viršutinės kairiosios matricos sumą iš pateiktos 2N X 2N matricos

Žemiau pateikiamas šio metodo įgyvendinimas: 

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> 

Išvestis
414

Laiko sudėtingumas: O(N2).
Pagalbinė erdvė: O(1) nes ji naudoja pastovią erdvę kintamiesiems

 

Sukurti viktoriną