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 java56 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 java1. 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.

Vänd rad 2

Omvänd kolumn 2

Vänd rad 7

Omvänd kolumn 6

Vänd rad 2

Nedan följer implementeringen av detta tillvägagångssätt:
fråga ett klickC++
// 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