题目描述
给定一个由 n 行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
算法设计:
对于给定的由 n 行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值。
输入
输入第 1 行是数字三角形的行数 n,1<=n<=100。接下来 n 行是数字三角形各行中的数字。所有数字在 0...99 之间。
输出
输出第 1 行中的数是计算出的最大值
样例输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
30
import java.text.DecimalFormat;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
int [][]a=new int[n][n];
int [][]b=new int[n][n];//每一层的每一个数的最大路径
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
a[i][j]=cin.nextInt();
}
}
b[0][0]=a[0][0];
for(int i=1;i<n;i++){
for(int j=0;j<=i;j++){
if(j==0){
b[i][j]=b[i-1][j]+a[i][j];
}
else if(j==i){
b[i][j]=b[i-1][j-1]+a[i][j];
}
else {
b[i][j]=Math.max(b[i-1][j-1],b[i-1][j])+a[i][j];
}
}
}
int max=b[n-1][0];
for(int i=1;i<b[n-1].length;i++){
if(max<b[n-1][i]){
max=b[n-1][i];
}
}
System.out.println(max);
cin.close();
}
}