项目场景:
从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。
输入格式
第一行包含整数 n,表示数字三角形的层数。
接下来 n 行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。
输出格式
输出一个整数,表示最大的路径数字和。
数据范围
1≤n≤500 //数据范围要注意,开的数组下标必需够用,否则部分样例是无法通过的
1≤n≤500,
−10000≤三角形中的整数≤10000
输入样例
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出样例
30
解决思路:
具体代码:
import java.util.Scanner;
public class Main {
static int n;
static int f[][] = new int[501][501]; //f(i,j)存,从底部到(i,j)的最大值
static int data[][] = new int[501][501]; //存放原始路径数据
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
n = input.nextInt();
for(int i = 1;i <= n;i++)
for(int j = 1;j <=i;j++)
data[i][j] = input.nextInt();
for(int i = 1;i <= n;i++)
f[n][i] = data[n][i]; //从下往上走的话,最后一排所有点都是出发点,到他们的最大值就是本身的值
for(int i = n-1;i >= 1;i--)
for(int j = i;j >= 1;j--)
f[i][j] = Math.max(f[i+1][j] + data[i][j], f[i+1][j+1] + data[i][j]);
System.out.println(f[1][1]);
}
}