Number Triangles
Time Limit: 1000 MS Memory Limit: 65536 Kb |
Total Submission: 1232 Accepted: 536 |
Description
给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Input
多组测试数据。每组测试数据第1 行是数字三角形的行数n,1=<n=<100。接下来n行是数字三角形各行中的数字。所有数字在0..99之间。
Output
输出路径数字和的最大值,每组测试数据输出单独一行。
Sample Input
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output
30
import java.util.Scanner;
/**
* Created by DrownFish on 2016/11/20.
*/
public class Main {
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()) {
int n = scanner.nextInt();
int tri[][] = new int[n + 1][n + 1];
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
tri[i][j] = scanner.nextInt();
}
}
for (int i = n - 2; i >= 0; i--) {
for (int j = 0; j <= i; j++) {
tri[i][j] += tri[i + 1][j] > tri[i + 1][j + 1] ? tri[i + 1][j] : tri[i + 1][j + 1];
}
}
System.out.println(tri[0][0]);
}
}
}