import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int N = 510;
int[][] w = new int[N][N];
int[][] f = new int[N][N];
int n = scan.nextInt();
for(int i = 1 ; i <= n ; i ++ ){
for(int j = 1 ; j <= i ; j ++ ){
w[i][j] = scan.nextInt();
}
}
//f存的是每一个路劲上面和的最大值
for(int i = 1 ; i <= n ; i ++ ) f[n][i] = w[n][i];
// 我们从下面往上面把遍历,所以最先面一排的f表示的就是当前点的最大值,赋值上权值
//从下面往上面遍历,因为我们最底层已经赋值了,所以从n - 1层开始,逐层递减到1
for(int i = n - 1 ; i != 0 ; i -- ){
//在第几层就有几个数,所以j是表示个数 ,从左到右
for(int j = 1 ; j <= i ; j ++ ){
//每一个比较他的左下边的点的路劲的最大值
//右边点的路劲的最大值,进行一个max
f[i][j] = Math.max(f[i + 1][j] + w[i][j] , f[i + 1][j + 1] + w[i][j]);
}
}
//最后输出顶点的路径的最大值
System.out.println(f[1][1]);
}
}
Acwing.数字三角形
最新推荐文章于 2024-06-20 20:20:21 发布