题目:输入一个n*n的矩阵,然后求出这个矩阵中的最大子矩阵和。
解题思路:将二维数组压缩成一维数组,然后在通过一维数组算出来最大值,更加简单。
细节处理:1.将二维数组压缩成一维数组 2.利用memset清理数组
代码:#include<bits/stdc++.h>
int a[101][101],b[101],n;
using namespace std;
int fun(int b[101],int n)
{
int c=0,i,max=0;
for(i=1;i<=n;i++)
{if(c>=0)
c=c+b[i];
else
c=b[i];
if(max<c)
max=c;}
return max;
}
int main()
{ cin>>n;
int i,j,k,add=0,max=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
{
memset(b,0,sizeof(b));
for(j=i;j<=n;j++)
{
for(k=1;k<=n;k++)
b[k]+=a[j][k];
add=fun(b,n);
if(max<add)
max=add;}
}
cout<<max<<endl;
return 0;
}
感想:解决问题时可以换种方法去思考问题这样解决问题可能会更简便。