# To The Max

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10238    Accepted Submission(s): 4928

Problem Description
Given 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 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.

Input
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-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].

Output
Output 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

Source

#include<cstring>
#include<cstdio>
#include<iostream>
#define N 111
#define INF 1e8

using namespace std;

int sum[N][N];
int n;

int main() {
//freopen("test.in","r",stdin);
while(~scanf("%d",&n)) {
memset(sum,0,sizeof sum);
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++) {
int x;
scanf("%d",&x);
sum[i][j]=sum[i][j-1]+x;
}
int ans=-INF;
for(int l=1; l<=n; l++) {
for(int r=l; r<=n; r++) {
int all=0;
for(int i=1; i<=n; i++) {
all+=sum[i][r]-sum[i][l-1];
ans=max(ans,all);
if(all<0)all=0;
}
}
}
printf("%d\n",ans);
}
return 0;
}


• 本文已收录于以下专栏：

## hdu1081 To The Max

• qq_21057881
• 2016年05月13日 21:22
• 248

## HDU1081 To The Max 动态规划 好题

To The Max Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total...
• hnust_V
• 2016年06月23日 20:35
• 64

## HDU 1003 && HDU 1081(最大子列和，最大子矩阵和).

• u013519226
• 2014年07月27日 15:42
• 1145

## hdu1081

/* 分析：     DP+压缩。 虽然31MS，不过这两天写的DP，首次一次ac，还是挺兴奋的 O(∩_∩)O~     其实- -III，max不能初始为零的，因为，最大值可能为负…… ...
• Ice_Crazy
• 2012年05月04日 22:46
• 1696

## hdu 1081 To The Max(矩阵中最大的和)

• qq_25673113
• 2016年02月08日 18:46
• 151

## hdu1081

#include #include using namespace std; int dp[110]; int temp[110]; int map[110][110]; int ...
• linxingqianglai
• 2015年09月12日 16:01
• 294

## HDU 1081 最大矩形和

To The Max Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot...
• qq_22902423
• 2015年08月12日 15:23
• 250

## hdu 1081 To The Max（最大子矩阵和）

To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total...
• u011721440
• 2014年04月27日 10:46
• 1051

## HDU 1081 To The Max（最大子矩阵）

/* 题意:求子矩阵的最大和 题解：这一类型的题，关键在压缩，将矩阵压缩为一维数组，然后转变为求最大字段和 */ #include using namespace std; const int ...
• lhshaoren
• 2012年08月18日 19:23
• 638

## hdu1081 最大子矩阵和(DP动态规划 最大子序列和变形题)

To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total...
• u013021513
• 2015年08月25日 13:17
• 333

举报原因： 您举报文章：hdu 1081 To The Max(最大子矩阵) 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)