AC代码
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[][] nums = new int[110][110];
int[][] dp = new int[110][110];
int n = sc.nextInt();
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i; j++){//注意是j <= i
nums[i][j] = sc.nextInt();
}
}
//层数是偶数,最后一定是落在第N/2或第N/2 + 1个元素上
//层数是奇数,最后一定落在最后一层的第N/2 +1个元素上,
if(n % 2 == 0) {
dp[n][n/2] = nums[n][n/2];
dp[n][n/2 + 1] = nums[n][n/2 + 1];
} else {
dp[n][n/2 + 1] = nums[n][n/2 + 1];
}
//逆推dp
for(int i = n - 1; i >= 1; i--){
for(int j = 1; j <= i; j++){//注意边界
if(dp[i + 1][j] != 0 || dp[i + 1][j + 1] != 0){
dp[i][j] = nums[i][j] + Math.max(dp[i + 1][j], dp[i + 1][j + 1]);
}
}
}
System.out.println(dp[1][1]);
}
}