#include<stdio.h>
#include<stdlib.h>
#define N 3
#define M 4
int MaxSum(int n,int *a)
{
int sum=0,b=0;
for(int i=1; i<=n; i++)
{
if(b>0)
b+=a[i];
else
b=a[i];
if(b>sum)
sum=b;
}
return sum;
}
int MaxSum2(int m,int n,int a[N][M])
{
int sum =0;
int *b=new int [n+1];
for(int i=0; i<m; i++)
{
for(int k=0; k<n; k++)
b[k] = 0;
for(int j=i; j<m; j++)
{
for(int p=1; p<=n; p++)
b[p] += a[j][p];
int max = MaxSum(n,b);
if(max>sum)
sum=max;
}
}
return sum;
}
int main()
{
int sum=0;
int a[N][M] = {{2,1,-1,-1},{0,3,-2,5},{2,4,-3,-1}};
sum=MaxSum2(N-1,M-1,a);
printf("矩阵a的最大子矩阵和是: %d\n",sum);
return 0;
}
评论0