题目描述
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和(路径上的每一步只可沿左斜线向下或右斜线向下走)。
输入描述
输入的第一行包含一个整数 N\ (1 \leq N \leq 100)N (1≤N≤100),表示三角形的行数。
下面的 NN 行给出数字三角形。数字三角形上的数都是 00 至 9999 之间的整数。
输出描述
输出一个整数,表示答案。
输入输出样例
示例
输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
30
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int N=scan.nextInt();
int[][] arr=new int[N][N];
int[][] distance=new int[N][N];
int max;
for (int i = 0; i < N; i++) {
for (int j = 0; j <= i; j++) {
arr[i][j]=scan.nextInt();
}
}
distance[0][0]=arr[0][0];
for (int i = 1; i < N; i++) {
distance[i][0]=arr[i][0]+distance[i-1][0];
}
for (int i = 1; i < N; i++) {
for (int j = 1; j <= i; j++) {
if(distance[i-1][j]>distance[i-1][j-1]){
distance[i][j]=distance[i-1][j]+arr[i][j];
}else{
distance[i][j]=distance[i-1][j-1]+arr[i][j];
}
}
}
max=distance[N-1][0];
for (int i = 1; i < N; i++) {
max=distance[N-1][i]>max?distance[N-1][i]:max;
}
System.out.println(max);
scan.close();
}
}