求助 95分 点13WA
查看原帖
求助 95分 点13WA
904261
Pao609859楼主2022/12/13 16:59


import java.util.Scanner;

/**
 * @author dongguanghui
 * @date 2022/12/13 10:33
 */
public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int bean[][] = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                bean[i][j] = scanner.nextInt();
            }
        }
        System.out.println(maxBean(bean));
    }
    private static int maxBean(int[][] bean){
        int length = bean.length;
        int[] num = new int[length];
        for (int i = 0; i < length; i++) {
            int m = 0,n = i;
            int flag1 = 1;  // 1向又 0向左
            int flag2 = 1;
            while(true) {
                num[i] += bean[m][n];
                if (m+1 == length && n+1 == length){
                    break;
                }else if (n -1 == -1 && m+1 == length) {
                    break;
                }
                if (m+1 == length) {
                    m--;
                    flag1=0;
                }else if (m-1==-1) {
                    m++;
                    flag1=1;
                }else if (flag1 == 1){
                    m++;
                }else if (flag1 == 0){
                    m--;
                }

                if (n+1 == length) {
                    n--;
                    flag2=0;
                }else if (n-1==-1) {
                    n++;
                    flag2=1;
                }else if (flag2 == 1){
                    n++;
                }else if (flag2 == 0){
                    n--;
                }

                if(m==0 && n ==i){
                    break;
                }
            }
        }

        int sum = 0;
        int result = 0;
        int center = length-1; //2倍中点
        for (int i = 0; i < num.length; i++) {
            for (int j = i+1; j < length; j++) {
                sum = num[i] + num[j];
                if ((i+j)%2 == 0) {
                    int m = (i+j)/2;
                    int n = (j-i)/2;
                    if (m*2==center && n*2==center){
                        //说明是中点
                        sum -= bean[m][n];
                    } else if (m*2<=center && n*2<= center){
                        if (m==n) {
                            sum -= bean[m][n]+bean[center-m][center-n];
                        } else {
                            //说明四个交点
                            sum -= bean[m][n]+bean[n][m]+bean[center-m][center-n]+bean[center-n][center-m];
                        }
                    } else {
                        // 说明有两个交点
                        sum -= bean[m][n]+bean[n][m];
                    }
                }
                if(result < sum){
                    result = sum;
                }
            }
        }
        return result;
    }
}
2022/12/13 16:59
加载中...