一、题目:
二、题目分析:
动态规划题
从上往下走,本行数=本行数+max(左上点的值,右上点的值);
向左下走的次数与向右下走的次数相差不能超过 1 表示:
1.奇数行只能走到最后一行的中间那个数
2.偶数行只能走到最后一行的中间两个数
三、解法
import java.util.Scanner;
public class H_数字三角形 {
public static void main(String[] args) {
//接收数据
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int[][] arr = new int[x][x];
for (int i = 0; i < x; i++) {
for (int k = 0; k <= i; k++) {
arr[i][k] = sc.nextInt();
}
}
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0) {
arr[i][0] = arr[i][0] + arr[i - 1][0];
} else {
arr[i][j] = Math.max(arr[i][j] + arr[i - 1][j - 1], arr[i][j] + arr[i - 1][j]);
}
}
}
//如果是奇数行 必定是最中间那个数 如果是偶数行 则是中间那两个中较大的数
int res = x % 2 == 1 ? arr[x - 1][x / 2] : Math.max(arr[x - 1][x / 2], arr[x - 1][x / 2 - 1]);
System.out.println(res);
}
}