数塔问题(使用动态规划思路求解)
如图所示,给定一个正整数构成的三角形,如下所示:
在下面的数字三角形中寻找一条从顶部到底边的路径,
使得路径上所经过的数字之和最大。
路径上的每一步都只能往左下或者右下走。
只需要求出这个最大和即可,不必给出路径。
三角形的行数大于1小于等于100,整数为0~99
输入样例:
输入样例:
5 – 三角形的行数
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出结果为:
30
import java.util.Scanner;
public class shutawenti {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int [][] num = new int [n+2][n+2];
int [][] max = new int [n+2][n+2];
for (int i = 1; i <=n; i++) {
for (int j = 1; j <=i; j++) {
num[i][j]=sc.nextInt();
}
}
for (int i = 1; i <=n; i++) {
for (int j = 1; j <=i; j++) {
//if(j+1>=n+2) continue;
num[i][j]=Math.max(num[i-1][j-1]+num[i][j],num[i-1][j]+num[i][j]);
}
}
int max1 = 0;
for (int i = 1; i <=n+1; i++) {
max1=Math.max(num[n][i], max1);
}
System.out.println(max1);
}
}