最后一个测试点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);
}
}
}