
代码
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入N(0<N<=100)");
int n=input.nextInt();
int[][] s=new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
s[i][j]=input.nextInt();
}
}
int answer = MaxSubMatrixSum(s);
System.out.println("答案:"+answer);
}
static int MaxSubArraySum(int[] arr){
int n=arr.length;
if(n==0)
return 0;
int[] maxSub=new int[n];
maxSub[0]=arr[0];
int max=arr[0];
for(int i=1;i<n;i++){
maxSub[i]=(maxSub[i-1]>0)?(maxSub[i-1]+arr[i]):arr[i];
if(max<maxSub[i])
max=maxSub[i];
}
return max;
}
static int MaxSubMatrixSum(int[][] arr){
int m=arr.length;
int n=arr[0].length;
int[][] total=new int[m][n];
for(int i=0;i<n;i++)
total[0][i]=arr[0][i];
for(int i=1;i<m;i++){
for(int j=0;j<n;j++){
total[i][j]=total[i-1][j]+arr[i][j];
}
}
int max=-1000;
int[] result=new int[n];
for(int i=0;i<m;i++){
for(int j=i;j<m;j++){
for(int f=0;f<n;f++){
if(i==0)
result[f]=total[j][f];
else
result[f]=total[j][f]-total[i-1][f];
}
int maximal=MaxSubArraySum(result);
if(maximal>max)
max=maximal;
}
}
return max;
}
运行结果
