最大子矩阵 Description 给出一个N [2<=N<=100],并给出一个N*N的矩阵,矩阵中的数为[-127,127]之间。求出矩阵中一块子矩阵的最大和。 比如: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 和最大的子矩阵应该是这个: 9 2 -4 1 -1 8 它的和是15。 Sample Input 4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -18 0 -2 Sample Output 15 解题方法 用一个数来求出每一个数的前缀和,再将每一段序列当作一个数,再把每行的这个序列用最大连续数列的方法做。 #include<cstdio> #include<iostream> using namespace std; int n,m,x,sum,a[100][100]; int main() {scanf("%d",&n);for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){scanf("%d",&x);a[i][j]=a[i][j-1]+x;//求前缀和}for (int first=1;first<=n;first++)//枚举序列的前面一个数for (int last=1;last<=first;last++)//枚举序列的后面一个数{x=0;for (int i=1;i<=n;i++){x+=a[i][first]-a[i][last-1];//最大连续数列sum=max(sum,x);if (x<0) x=0;}}if (sum>0) printf("%d",sum);else printf("NO"); }