原题链接:用户登录
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和 (路径上的每一步只可沿左斜线向下或右斜线向下走)。
输入描述
输入的第一行包含一个整数 N(1< N < 100),表示三角形的行数。
下面的 N 行给出数字三角形。数字三角形上的数都是 0至 99之间的整数。
输出描述
输出一个整数,表示答案。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[][] dp = new int[n + 1][n + 1];
int max = 0;
for (int i = 1; i < dp.length; i++) {
for (int j = 1; j <= i; j++) {
dp[i][j] = scan.nextInt();
dp[i][j] = Math.max(dp[i][j] + dp[i - 1][j], dp[i][j] + dp[i - 1][j - 1]);
max = Math.max(max, dp[i][j]);
}
}
scan.close();
System.out.println(max);
}
}
一边获取三角形中某一个数据,与上面能进行相加的进行相加操作,同时max获取最大值,因为循环了n行,所以获取到的数据也是最后一行中的最大值,其中最后得出的数组中每一个数据都是与上面的数据进行累加的结果。