
没想到居然可以O(n3)暴力过
就是大概之前的 最大连续子序列和
加成2维度了 枚举起始列 和 终止列 然后计算从1到n行最大的子矩阵的和
注意n 和 m 的输入顺序!!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = ;
ll s[maxn][maxn],sum[maxn][maxn]; int main ()
{
int m,n;
scanf("%d %d",&m,&n);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
scanf("%lld",&s[i][j]);
sum[i][j] = sum[i][j-] + s[i][j];//sum[i][j]记录第i行从1到j的前缀和
}
}
ll res=;
for(int l=;l<=m;l++)
{
for(int j=;j+l<=m;j++)//枚举起始 终止列
{
int r = l+j;
ll x= ;
for(int k=;k<=n;k++)//每行
{
x = max(x,(ll)) +sum[k][r] -sum[k][l-];
res = max(res,x);
}
}
}
printf("%lld\n",res);
}