#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//将最大子矩阵问题转化为最大子段和问题
int mp[102][102];int n;
int maxArray(int digit[]) //求最大子段和
{
int i,j;
int b = digit[0];
int temp = digit[0];
for(i=1;i<n;i++)
{
if(b>0)
b+=digit[i];
else
b=digit[i];
if(temp<b)
temp = b;
}
return temp;
}
void search()
{
int i,j,k;
int array[105];
int max = mp[0][0];
for(i=0;i<n;i++)
{
memset(array,0,sizeof(array));
for(j=i;j<n;j++)//i行到n行叠加
{
for(k=0;k<n;k++)
{
array[k] += mp[j][k];
}
int temp = maxArray(array);
if(max<temp)
max = temp;
}
}
printf("%d\n",max);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&mp[i][j]);
search();
}
return 0;
}
最大子矩阵 (DP)
最新推荐文章于 2023-07-27 14:44:46 发布