最大子矩阵和最大连续子序列十分类似。
对于矩阵,可以将他的一列相加,然后成为一行,就是最大连续子序列了。
#include<stdio.h> #include<string.h> #define maxn 105 int map[maxn][maxn],f[maxn]; int max(int x,int y) { return x>y?x:y; } int Get_max(int n) { int i,j; int ans=-99999999,ret=0; for(i=1;i<=n;i++) { if(ret>0) { ret+=f[i]; } else { ret=f[i]; } ans=max(ret,ans); } return ans; } int main() { int i,j,n,ret; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&map[i][j]); ret=-99999999; for(i=1;i<=n;i++) { memset(f,0,sizeof(f)); for(j=i;j<=n;j++) { for(int k=1;k<=n;k++) { f[k]+=map[j][k]; } int ans=Get_max(n); if(ans>ret) ret=ans; } } printf("%d ",ret); } }