#include using namespace std; const int N = 330; int n; int a[N][N], s[N][N], dp[N]; int res = INT_MIN; int main() { cin >> n; // 前缀和(竖直方向) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { cin >> a[i][j]; s[i][j] = s[i - 1][j] + a[i][j]; // 一维前缀和,这可不是二维前缀和 } // 降维变成一维dp for (int i = 0; i <= n - 1; i++) // 枚举左上角 for (int j = i + 1; j <= n; j++) // 枚举右下角 for (int k = 1; k <= n; k++) { // 枚举每一列 dp[k] = max(s[j][k] - s[i][k], dp[k - 1] + s[j][k] - s[i][k]); res = max(res, dp[k]); } // 输出 cout << res << endl; return 0; }