Problem
Given a two-dimenstmarray of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1x1 or greater located within the whole array. the sum of a rectangle is the sum of all the elements in that rectangle. in this problem the sub-rectangle with the largest sum is referred to as the maximal sub-rectangle.
As an example, the maximal sub-rectangle of the array:
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.
The input consists of an n x n Array of integers. the input begins with a single positive integer n on a line by itself, indicating the size of the square two-dimen=array. this is followed by N 2 integers separated by whitespace (spaces and newlines ). these are the N 2 integers of the array, presented in row-Major Order. that is, all numbers in the first row, left to right, then all numbers in the second row, left to right, etc. N may be as large as 100. the numbers in the array will be in the range [-127,127].
Output
Output the sum of the maximal sub-rectangle.
Example
Input
4
0-2-7 0 9 2-6 2
-4 1-4 1-1
8 0-2
Output
15
Water.
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<limits.h>using namespace std;int a[110][110];int n,x;int main(){ int sum,maxn; while(~scanf("%d",&n)) { memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d",&x); a[i][j]=a[i-1][j]+x; } } maxn=0; for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { sum=0; for(int k=1;k<=n;k++) { int t=a[j][k]-a[i-1][k]; sum+=t;// cout<<"fuck "<<sum<<endl; if(sum<0) sum=0; if(sum>maxn) maxn=sum; } } } printf("%d\n",maxn); } return 0;}