#include #define NMAX 55 #define INF 1000000000 int A[NMAX][NMAX], SA[NMAX][NMAX], ans; int N, i, j, rup, rdown, cleft, cright, sum, csum; int main() { scanf("%d", &N); for (i = 1; i <= N; i++) for (j = 1; j <= N; j++) scanf("%d", &A[i][j]); for (j = 1; j <= N; j++) { SA[0][j] = 0; for (i = 1; i <= N; i++) SA[i][j] = SA[i - 1][j] + A[i][j]; } ans = -INF; for (rup = 1; rup <= N; rup++) for (rdown = rup; rdown <= N; rdown++) for (cleft = 1; cleft <= N; cleft++) { sum = SA[rdown][cleft] - SA[rup - 1][cleft]; if (sum > ans && rup == rdown) ans = sum; for (cright = cleft + 1; cright <= N; cright++) { csum = sum + SA[rdown][cright] - SA[rup - 1][cright]; if (csum > ans && (rdown - rup == cright - cleft)) ans = csum; sum += A[rup][cright]; if (rdown > rup) sum += A[rdown][cright]; } } printf("%d\n", ans); return 0; }