88分求助
查看原帖
88分求助
871235
cqupt楼主2022/11/18 22:56

最后一个测试点MLE了,我觉得已经把空间优化得最好了,还是空间超了,请教一下还有哪一点写得不好,或者优化得不好吗?或者说是java的问题?

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static int[][] dp;

    public static ArrayList<ArrayList<Integer>> array;

    public static void main(String[] args) {
        int n = 0;
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        array = new ArrayList<>(n);
        dp = new int[n][];
        for(int i = 0; i <n; ++i) {
            dp[i] = new int[i + 1];
            for(int j =0; j <= i; ++j)
                dp[i][j] = -1;
        }
        for(int i = 0; i < n; ++i) {
            array.add(new ArrayList<Integer>(i));
            for(int j = 0; j <= i; ++j) {
                array.get(i).add(sc.nextInt());
            }
        }

        System.out.println(solution(n, 0, 0));

    }

    private static int solution(int n, int x, int y) {
        if(x == n - 1) {
            dp[x][y] =  array.get(x).get(y) + 1;
            return array.get(x).get(y);
        }
        else {
            if(dp[x + 1][y] == -1)
                dp[x + 1][y] =solution(n, x + 1, y);
            if(dp[x + 1][y + 1] == -1)
                dp[x + 1][y + 1] = solution(n, x + 1, y + 1);
            return Math.max(dp[x + 1][y + 1], dp[x + 1][y]) + array.get(x).get(y);
        }
    }
}
2022/11/18 22:56
加载中...