hdu 1081 To The Max
2013-09-11 14:06
351 查看
To The Max
TimeLimit: 2000/1000 MS
(Java/Others) Memory
Limit: 65536/32768 K (Java/Others)Total Submission(s):
3622 Accepted
Submission(s): 1721
Problem DescriptionGiven a two-dimensional array of positive and negative integers, a
sub-rectangle is any contiguous sub-array of size 1 x 1 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 09 2 -6 2-4 1 -4 1-1 8 0 -2is in the lower left corner:9 2-4 1-1 8and has a sum of 15. InputThe 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-dimensional 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]. OutputOutput the sum of the maximal sub-rectangle. Sample Input4
0 -2
-7 0
9 2 -6
2
-4 1
-4 1
-1 8 0
-2 Sample Output15 题目的意思很简单,在一个矩阵里面找它的子矩阵,使得子矩阵数值之和到达最大。其实就是最大子段和问题在二维空间上的推广。考察下面题目中的例子:0 -2 -7 09 2 -6 2-4 1 -4 7-1 8 0 -2我们分别用i j表示起始行和终止行,遍历所有的可能:for(i=1;i<=n;i++) for(j=i;j<=n;j++) {}我们考察其中一种情况 i=2 j=4,这样就相当与选中了2 3 4三行,求那几列的组合能获得最大值,由于总是 2 3 4行,所以我们可以将这3行”捆绑”起来,变为求 4(9-4-1),11(8+2+1),-10(-6-4+0),7(7+2-2)的最大子段和,ok,问题成功转化为一维的情况!代码写的有点乱,呼呼呼!!!!(借鉴了大牛的思路) #include<stdio.h>int
main(){int
N,i,j,k;int
a[105][105];int
b[105],max;while(scanf("%d",&N)!=EOF){max=0;for(i=0;i<N;i++){for(j=0;j<N;j++)scanf("%d",&a[i][j]);}for(i=0;i<N;i++){for(j=0;j<N;j++){if(i==j){ for(k=0;k<N;k++){b[k]=a[i][k];}}else{int
l;for(k=0;k<N;k++){b[k]=0;for(l=i;l<=j;l++){b[k]+=a[l][k];}}}int
temp=1,first,last;int
sum=0,maxnum=-1000000;for(k=0;k<N;k++){sum+=b[k];if(sum>maxnum){maxnum=sum;//first=temp;//last=k+1;}if(sum<0){sum=0;//temp=k+1;}}if(maxnum>max){max=maxnum;} }}printf("%d\n",max);} return
0;}
相关文章推荐
- 【动态规划】HDU 1081 & XMU 1031 To the Max
- hdu 1081 & poj 1050 To The Max(最大和的子矩阵)
- HDU 1003 Max Sum && HDU 1081 To The Max 一维子串最大和& 二维矩阵最大和
- To The Max &&http://acm.hdu.edu.cn/showproblem.php?pid=1081
- HDU 1081 & POJ 1050 To The Max (最大子矩阵和)
- POJ 1050 && HDU 1081 To the Max(前缀和)
- HDU - 1081 - To The Max
- 【HDU 1081】To The Max(求子矩阵元素和)
- hdu 1081 To The Max
- hdu 1081 To The Max(暴力枚举+最大连续子数组和)
- hdu 1081 To The Max ****poj 1050(最大子矩阵和)DP
- HDU 1081 To The Max
- hdu 1081 To The Max
- hdu 1081 To The Max(子矩阵最大和)
- hdu 1081 To The Max(矩阵中最大的和)
- HDU 1081 To The Max
- HDU 1081 To The Max 暴力模拟O(n^4) dp优化O(n^3)
- hdu 1081 to the max
- hdu 1081 To The Max(最大子矩阵)
- Hdu 1081 To The Max -- DP