Maximal Sub-rectangle |
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB |
Problem description |
Given a 2-dimensional array of positive and negative integers, find the sub-rectangle with the largest sum. 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. A sub-rectangle is any contiguous sub-array of size 1 × 1 or greater located within the whole array. 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 -2is in the lower-left-hand corner: 9 2 -4 1 -1 8 and has the sum of 15. |
Input |
The input consists of an array of N × N integers. The input begins with a single positive integer N on a line by itself indicating the size of the square two dimensional array. This is followed by N2 integers separated by white-space (newlines and spaces). These N2 integers make up the array in row-major order (i.e., all numbers on the first row, left-to-right, then all numbers on 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 |
The output is 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 main(){
int a[102][102]={0},n,i,j,t,k,sum;
cin>>n;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++){
cin>>t;
a[i][j]=a[i][j-1]+t;
}
for(sum=0,i=1; i<=n; i++)
for(j=1; j<=n; j++)
for(t=0,k=j; k<=n; k++){
t += a[k][i];
if(t > sum)
sum = t;
}
cout<<sum<<endl;
return 0;
}
评论