大意:
从一个矩形数组中选出一个和值最大的子矩形数组,输出这个和值。
思路:
存下左上角到任意位置的所有矩形数组的和值
循环求取每一个子矩形数组,
设定想要求的子矩形数组为【i】【j】到【i1】【m1】
则子矩形数组的和为为sum【i1】【m1】- sum【i1】【j-1】- sum【i-1】【j1】+ sum 【i-1】【j-1】
找出其中和值最大的数。
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
int main()
{
int n,a;
int sum1;
int max=1<<31;
int sum[105][105]={0};
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
sum1=0;
for(int j=1;j<=n;j++)
{
scanf("%d",&a);
sum1+=a;
sum[i][j]=sum[i-1][j]+sum1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int i1=i;i1<=n;i1++)
{
for(int j1=j;j1<=n;j1++)
{
sum1=sum[i1][j1]-sum[i1][j-1]-sum[i-1][j1]+sum[i-1][j-1];
if(sum1>max)
max=sum1;
}
}
}
}
printf("%d\n",max);
}