var a:array[1..51,1..51]of integer; n,dimensiune,i,j,suma,suma_maxima,new_i,new_j:integer; begin read(n); for i:=1 to n do begin for j:=1 to n do read(a[i,j]); end; suma_maxima := -MAXINT; for i := 1 to n do for j := 1 to n do { patratul cu care lucram are coltul dreapta-sus la coordonatele [i, j] } for dimensiune := 1 to n do { lucram la patratul care are coltul dreapta-sus la coordonatele [i, j] si latura = } if (i + dimensiune - 1 <= n) and (1 <= j - dimensiune + 1) then begin { 1. dreapta-sus: (i, j) } { 2. dreapta-jos: (i+dimensiune-1, j) } { 3. stanga-sus: (i, j-dimensiune+1) } { 4. stanga-jos: (i+dimensiune-1, j-dimensiune+1) } suma := 0; for new_j := j-dimensiune+1 to j do suma := suma + a[i, new_j] + a[i+dimensiune-1,new_j]; for new_i := i to i+dimensiune-1 do suma := suma + a[new_i,j-dimensiune+1] + a[new_i,j]; suma := suma - a[i,j] - a[i,j-dimensiune+1] - a[i+dimensiune-1,j] - a[i+dimensiune-1,j-dimensiune+1]; if dimensiune = 1 then suma := a[i,j]; if suma > suma_maxima then suma_maxima := suma; end; writeln(suma_maxima); end.