题目描述:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
(图一)
图一表示一个5行的数字三角形。假设给定一个n行数字三角形,计算出从三角形顶至底的一条路径,使该路径经过的数字总和最大。
每一步只能由当前位置向左下或右下。
代码:
package lanqiao;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
initNum(T);
}
public static Scanner scanner = new Scanner(System.in);
public static int[][]NUM = new int[100][100];
public static int N = 0;
public static void initNum(int T){ //输入数组
for(int t = 0; t < T; t++){
N = scanner.nextInt();
for(int i = 0; i < N; i++){
for(int j = 0; j <= i; j++){
NUM[i][j] = scanner.nextInt();
}
}
int re = getMax();
System.out.println(re);
}
}
public static int MAX(int a,int b){
return a>b?a:b;
}
public static int getMax(){
int[] Temp = new int[100];
for(int i = 0; i < N; i++){
Temp[i] = NUM[N-1][i];
}
for(int i = N-2; i >= 0; i--){
for(int j = 0; j <= i; j++){
Temp[j] = NUM[i][j] + MAX(Temp[j],Temp[j+1]);
}
}
return Temp[0];
}
}