#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int dp[305];
int n;
int getmax()
{
int i;
int maxn=-999999999;
int dpp[305];
dpp[0]=dp[0];
for (i=1;i<=n-1;i++)
{
if (dpp[i-1]>0)
dpp[i]=dp[i]+dpp[i-1];
else
dpp[i]=dp[i];
if (dpp[i]>maxn)
maxn=dpp[i];
}
return maxn;
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
int i,j,k;
int A[305][305];
for (i=0;i<=n-1;i++)
for (j=0;j<=n-1;j++)
scanf("%d",&A[i][j]);
int maxsum=-999999999;
int sum;
for (i=0;i<=n-1;i++)
{
memset(dp,0,sizeof(dp));
for (j=i;j<=n-1;j++)
{
for (k=0;k<=n-1;k++)
dp[k]+=A[j][k];
//for (k=0;k<=n-1;k++)
//printf("%d ",dp[k]);
sum=getmax();
//printf("%d:%d\n",j,sum);
if (sum>maxsum)
maxsum=sum;
}
}
printf("%d\n",maxsum);
}
return 0;
}
HDU1081 && POJ1050(求最大子矩阵和)
最新推荐文章于 2020-12-18 20:32:40 发布