#include #include using namespace std; #define MAX_N 60 #define INF 1<<29 int b[MAX_N][MAX_N][MAX_N], v[MAX_N][MAX_N], n,maxim; void readData() { int i, j; cin >> n; maxim = -INF; for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { cin >> v[i][j]; b[i][j][1] = v[i][j]; if (v[i][j] > maxim) maxim = v[i][j]; } } } void compute() { int i, j, k, sum = 0; for (k = 2; k < n; k++) { for (i = k; i <= n; i++) { for (j = n - k + 1; j >= 1; j--) { b[i][j][k] = v[i][j] + b[i - 1][j][k - 1] + b[i][j + 1][k - 1] + v[i - k + 1][j + k - 1]; if (k != 2) b[i][j][k] = b[i][j][k] - v[i - 1][j + 1]; } } } for (k = 2; k <= n; k++) { for (i = k; i <= n; i++) { for (j = n - k + 1; j >= 1; j--) { int val = b[i][j][k] - b[i - 1][j + 1][k - 2]; if (val > maxim) maxim = val; } } } cout << maxim; } int main() { readData(); compute(); return 0; }