个人学习记录 理解可能不是很充分 有不足望指教 废话不多说先上代码 import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][]a = new int[n+1][n+1]; for(int i=1 ; i<=n ; i++){ for(int j=1 ; j<=i ; j++){ a[i][j] = sc.nextInt(); } } for(int i=1 ; i<=n ; i++){ for(int j=1 ; j<=i ; j++){ a[i][j]+= Math.max(a[i-1][j-1], a[i-1][j]); } } if (n%2==0){ System.out.println(Math.max(a[n][n/2],a[n][n/2+1])); }else { System.out.println(a[n][n/2+1]); } } }
看到数字三角型 首先想到的就是用数组来解决
先赋值,赋值后for循环 从第一层开始 往下走 第一层就一个数是不用管的 向下走 因为向下一场走的要求是左右最近的最大的数 所以用一个max函数比较下一场两个数之间大的一方 比较出大的数与上一层的数相加如此直到最后
在最后输出的时候就要判断一下三角形的层数,如果是偶数 最大路径数就是最后一层中间两个中的一个 如果是奇数的话 必是最后一层中间的数