[转]http://blog.csdn.net/kongming_acm/article/details/5725917
1092: To the Max
Result | TIME Limit | MEMORY Limit | Run Times | AC Times | JUDGE |
---|---|---|---|---|---|
3s | 8192K | 1256 | 268 | Standard |
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.
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].
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.
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
This problem is used for contest: 35
package com.iteye.caoruntao.zoj;
import java.util.Scanner;
/**
* @author caoruntao
*
*/
public class ToTheMax {
private static int a[][];
private static int n;
private static int max;
public static void compute(){
max = 1<<31;
for(int i=0; i<n; i++){
int f[] = new int[101];
for(int j=i; j<n; j++){
int b = 0;
for(int k=0; k<n; k++){
f[k] += a[k][j];
}
for(int k=0; k<n; k++){
if(b > 0){
b += f[k];
}
else{
b = f[k];
}
if(b > max){
max = b;
}
}
}
}
System.out.println(max);
}
/**
* @param args
*/
public static void main(String[] args) {
a = new int[101][101];
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
n = sc.nextInt();
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
a[i][j] = sc.nextInt();
}
}
compute();
}
}
}