希望得到这个问题的答案

img

代码



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;
    }

运行结果

img