题目:给定一个矩阵matrix,其中的值有正、有负、有0,返回子矩阵的最大累加和。
例如:matrix为:
-1 -1 -1
-1 2 2
-1 -1 -1
其中最大累加和的子矩阵为:
2 2
所以返回4。
求每行的最大子数组最大累加和 再将后面行累加再以行来找最大和
import java.sql.Array;
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = input.nextInt();
int[][] matrix = new int[n][m];
for(int i =0;i<n;i++){
for(int j = 0;j<m;j++){
matrix[i][j] = input.nextInt();
}
}
int res = matrixMaxSum(matrix);
System.out.println(res);
}
public static int matrixMaxSum(int[][] matrix){
int n = matrix.length;
int m = matrix[0].length;
int max = Integer.MIN_VALUE;
int[] arr = new int[m];
for(int i =0;i<n;i++){
for(int j = i;j<n;j++){
for(int k = 0;k<m;k++){
arr[k] += matrix[j][k];
}
max = Math.max(max,maxSum(arr));
}
Arrays.fill(arr,0);
}
return max;
}
public static int maxSum(int[] arr){
int n = arr.length;
int max = Integer.MIN_VALUE,sum =0;
for(int i =0;i<n;i++){
sum+=arr[i];
if(max<sum){
max = sum;
}
if(sum < 0){
sum = 0;
}
}
return max;
}
}