把二维矩阵转化为一维,然后求最大连续子序列和
#include<iostream>
using namespace std;
int MaxSum(int n,int a[])
{
int sum = 0,i,max = INT_MIN;
for(i = 1;i <= n;i++)
{
sum += a[i];
if(sum > max)
max = sum;
if(sum < 0)
sum = 0;
}
return max;
}
int main()
{
int n,i,j,k,num[105][105],b[105],max,ans;
cin>>n;
for(i = 1;i <= n;i++)
for(j = 1;j <= n;j++)
scanf("%d",&num[i][j]);
for(max = INT_MIN,i = 1;i <= n;i++)
{
memset(b,0,sizeof(b));
for(j = i;j <= n;j++) //从第i行到第j行
{
for(k = 1;k <= n;k++) //当j = 1时,b[k]记录的是第1行,k列的值,j = 2时,记录的是第1,2两行,k列的值
b[k] += num[j][k];
ans = MaxSum(n,b);
max = ans > max ? ans : max;
}
}
printf("%d\n",max);
return 0;
}