矩阵运用到二维数组,解决方法是先把矩阵按行或列拆开,转换成寻找一维数组的连续最大子列和问题
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<cstring>
using namespace std;
int search(int n,int a[])//求一维数组连续子列和
{
int sum=0,max=0;
for(int i=0;i<n;i++)
{
if(sum>0)
sum+=a[i];
else
sum=a[i];
if(sum>max)
max=sum;
}
return max;
}
int main()
{
int n,a[100][100],temp[100];
int maxc=0,max=0;
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
for(int i=0;i<n;i++)//记录矩阵开始的行号
{
memset(temp,0,sizeof(temp));
for(int j=i;j<n;j++)//记录矩阵结束的行号
{
for(int k=0;k<n;k++)
temp[k]+=a[j][k];
maxc=search(n,temp);
if(maxc>max)
max=maxc;
}
}
cout<<max<<endl;
return 0;
}