Description
Given a two-dimensional array of positive andnegative integers, a sub-rectangle is any contiguous sub-array ofsize 1*1 or greater located within the whole array. The sum of arectangle is the sum of all the elements in that rectangle. In thisproblem the sub-rectangle with the largest sum is referred to asthe maximal sub-rectangle.
As an example, the maximal sub-rectangle of thearray: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 is in the lower left corner: 9 2 -4 1 -1 8 and has a sum of 15. Input
The input consists of an N * N array of integers.The input begins with a single positive integer N on a line byitself, indicating the size of the square two-dimensional array.This is followed by N^2 integers separated by whitespace (spacesand newlines). These are the N^2 integers of the array, presentedin row-major order. That is, all numbers in the first row, left toright, then all numbers in the second row, left to right, etc. Nmay be as large as 100. The numbers in the array will be in therange [-127,127].
Output
Output the sum of the maximal sub-rectangle.
Sample Input 4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 Sample Output 15 |
#include<iostream>
using namespace std;
int a[101][101],f[101],d[101];
int main()
{
int n,i,j,k,max;
while(cin>>n)
{
max=-1000;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
{
memset(f,0,sizeof(f));
for(j=i;j<=n;j++)
for(k=1;k<=n;k++)
{
f[k]+=a[j][k];
if(f[k]+d[k-1]>0)
d[k]=f[k]+d[k-1];
else d[k]=0;
if(max<d[k])
max=d[k];
}
}
cout<<max<<endl;
}
return 0;
}