import java.util.Scanner; public class poj1163 { public static void main(String[] args) { //在上面的数字三角形中寻找一条从顶部到底边的路径,使得 //路径上所经过的数字之和最大。路径上的每一步都只能往左下或 //右下走。只需要求出这个最大和即可,不必给出具体路径。 Scanner sca = new Scanner(System.in); int n = sca.nextInt(); int[][] a = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { a[i][j] = sca.nextInt(); } } //从下往上计数 int [][]maxsum=new int[n][n]; maxsum[0][0]=-1; for(int i=n-1;i>=0;i--) { for (int j = 0; j <= i; j++) { if (maxsum[0][0] == -1) { if (i == n - 1) maxsum[i][j] = a[i][j]; else { maxsum[i][j] = Math.max(maxsum[i + 1][j], maxsum[i + 1][j + 1]) + a[i][j]; } } } } System.out.println(maxsum[0][0]); } }