(Java实现) 数塔问题

数塔问题(使用动态规划思路求解)
如图所示,给定一个正整数构成的三角形,如下所示:
在下面的数字三角形中寻找一条从顶部到底边的路径,
使得路径上所经过的数字之和最大。
路径上的每一步都只能往左下或者右下走。
只需要求出这个最大和即可,不必给出路径。
三角形的行数大于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);
	}
}

原文地址:https://www.cnblogs.com/a1439775520/p/13079090.html