分析
简单的最大子矩阵和,将区间上下界确定以后逐级求最大连续子段和即可
#include <iostream> #include <cstdio> #include <memory.h> using namespace std; typedef long long ll; const int N=200+1; ll a[N][N],f[N],t[N],ans; int n,m; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) scanf("%lld",&a[i][j]); for (int i=1;i<=n;i++) { memset(t,0,sizeof t); for (int j=i;j<=n;j++) { for (int k=1;k<=m;k++) t[k]+=a[j][k]; f[1]=t[1]; ans=max(ans,f[1]); for (int k=2;k<=m;k++) f[k]=max(f[k-1]+t[k],t[k]),ans=max(ans,f[k]); } } printf("%lld",ans); }