P1250 最大子矩阵
描述
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1×11×1)子矩阵。
比如,如下4×4的矩阵
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
的最大子矩阵是
9 2
-4 1
-1 8
这个子矩阵的大小是15。
格式
输入格式
输入是一个N×N的矩阵。输入的第一行给出N(0
输出格式
输出最大子矩阵的大小。
样例
输入样例
4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
输出样例
15
#include<stdio.h>
int main()
{
int begin,end,bi,bj;
int n;
int i,j,k,z;
int a[101][101];
scanf("%d",&n);
int max=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
int temp[101]={0};
int d[101]={0};
for(int z=1;z<=n;z++){
for(int k=i;k<=j;k++)
{
temp[z]+=a[k][z];
}
}
for(int x=1;x<=n;x++)
{
d[x]=temp[x];
if(d[x-1]>0)
d[x]=d[x-1]+temp[x];
if(max<d[x]){
if(d[x-1]<=0){
begin=x;
}
max=d[x];
end=x;
bi=i;bj=j;
}
}
}
}
for(i=bi;i<=bj;i++){
for(j=begin;j<=end;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("%d",max);
return 0;
}
版权声明:本文为wyx9475原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。