标签:des io ar os sp for on 2014 amp
Maximum Sum Time Limit:500MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status 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 ?2 is in the lower-left-hand corner and has the 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 by itself indicating the size of the square two dimensional array. This is followed by N 2 integers separated by white-space (newlines and spaces). These N 2 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 input output 4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 15 最大子矩阵,不说了~ /************************************************************************* > File Name: k.cpp > Author:yuan > Mail: > Created Time: 2014年11月09日 星期日 22时38分42秒 ************************************************************************/ #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cstdlib> #include<cmath> using namespace std; int mat[107][107]; int sum[107],dp[107]; int n,ans; int main() { while(~scanf("%d",&n)){ memset(mat,0,sizeof(mat)); memset(sum,0,sizeof(sum)); ans=-0x3ffffff; int m=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&mat[i][j]); } for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) { memset(sum,0,sizeof(sum)); for(int k=i;k<=j;k++) { for(int l=1;l<=n;l++) sum[l]+=mat[k][l]; } memset(dp,0,sizeof(dp)); for(int k=1;k<=n;k++) { if(dp[k-1]<0) dp[k]=sum[k]; else dp[k]=dp[k-1]+sum[k]; ans=max(ans,dp[k]); } } printf("%d\n",ans); } return 0; }
标签:des io ar os sp for on 2014 amp
原文地址:http://blog.csdn.net/yuanchang_best/article/details/40958907