Biorąc pod uwagę A 2N x 2N macierz liczb całkowitych. Możesz odwrócić dowolny wiersz lub kolumnę dowolną liczbę razy i w dowolnej kolejności. Zadanie polega na obliczeniu maksymalnej sumy lewego górnego rogu N X N podmacierz tj. suma elementów podmacierzy od (0 0) do (N - 1 N - 1).
Przykłady:
Wejście : z[][] = {
112 42 83 119
56 125 56 49
15 78 101 43
62 98 114 108
}
Wyjście : 414
Podana macierz ma rozmiar 4 x 4, którą musimy maksymalizować
suma lewej górnej macierzy 2 X 2, tj
suma mat[0][0] + mat[0][1] + mat[1][0] + mat[1][1].
Następujące operacje maksymalizują sumę:
1. Odwróć kolumnę 2
112 42 114 119
56 125 101 49
15 78 56 43
62 98 83 108
2. Odwróć wiersz 0
119 114 42 112
56 125 101 49
15 78 56 43
62 98 83 108
Suma macierzy w lewym górnym rogu = 119 + 114 + 56 + 125 = 414.
Aby zmaksymalizować sumę lewej górnej podmacierzy, należy obserwować każdą komórkę lewej górnej podmacierzy, istnieją cztery kandydaci, co oznacza odpowiednie komórki w podmacierzy lewy górny, prawy górny, lewy dolny i prawy dolny róg, z którymi można je zamienić.
Teraz obserwuj, czy dla każdej komórki, gdziekolwiek się ona znajduje, możemy zamienić ją z odpowiednią wartością kandydującą w lewej górnej podmacierzy, bez zmiany kolejności pozostałych komórek w lewej górnej podmacierzy. Diagram pokazuje przykład, w którym maksymalna wartość z 4 kandydatów znajduje się w prawej górnej podmacierzy. Jeśli znajduje się w podmacierzy w lewym dolnym lub prawym dolnym rogu, możemy najpierw odwrócić wiersz lub kolumnę, aby umieścić go w podmacierzy w prawym górnym rogu, a następnie wykonać tę samą sekwencję operacji, jak pokazano na diagramie.
W tej macierzy powiedzmy a26jest maksimum z 4 kandydatów i a23należy zamienić na a26bez zmiany kolejności komórek w lewej górnej podmacierzy.

Odwrócony rząd 2

Odwrócona kolumna 2

Odwrócony rząd 7

Odwrócona kolumna 6

Odwrócony rząd 2

git rebase
Poniżej implementacja tego podejścia:
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>
Wyjście
414
Złożoność czasowa: O(N2).
Przestrzeń pomocnicza: O(1) ponieważ używa stałej przestrzeni dla zmiennych
Utwórz quiz