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 8and 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; }

评论