队友很好的想法
lin[i][j][k]表示第i行第j列到第k列的和
sum[i][j][k]表示矩阵[(1,j),(i,k)]的最大矩阵和
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn =101;
const int INF =1<<30;
int line[101][101][101];
int sum[101][101][101];
int N, i, j, k, a, ans;
int main()
{
while (~scanf("%d", &N))
{
memset(sum, 0, sizeof(sum));
memset(line, 0, sizeof(line));
for ( i =1; i <= N; i++)
{
scanf("%d", &line[i][1][1]);
for ( j =2; j <= N; j++)
{
scanf("%d", &a);
for ( k =1; k <= j; k++)
line[i][k][j] = line[i][k][j-1]+a;
}
}
ans = -INF;
for ( i =1; i <= N; i++)
for ( j =1; j <= N; j++)
for ( k =j; k <= N; k++)
{
sum[i][j][k] = max(sum[i-1][j][k]+line[i][j][k], line[i][j][k]);
if (ans<sum[i][j][k])
ans = sum[i][j][k];
}
printf("%d\n", ans);
}return 0;
}