三角形数塔(Java)

设有一个三角形的数塔,顶点结点称为根结点,每个结点有一个整数数值。从顶点出发,可以向左走,也可以向右走。如图所示。问题:当三角形数塔给出之后,找出一条从第一层到达底层的路径,使路径的值最大。若这样的路径存在多条,任意给出一条即可。

我们从下往上开始选取,每次选取第i个都是下面一行的第i个或第i+1个,为了避免超出数组,我们把数组开大两个,使它的左右都为0,其实也选取不到它,因为这树上的数一定比0大,另外我们创建一个path数组来记录选中的值,以下是代码

import java.util.Scanner;
public class Main {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        int arr[][] = new int[6][6];
        int dp[][] = new int[6][6];
        int path[][] = new int[6][6];
        arr[1][1] = 13;
        arr[2][1] = 11;arr[2][2] = 8;
        arr[3][1] = 12; arr[3][2] = 7;arr[3][3] = 26;
        arr[4][1] = 6;arr[4][2] = 14;arr[4][3] = 15;arr[4][4] = 8;
        arr[5][1] = 12;arr[5][2] = 7;arr[5][3] = 13;arr[5][4] = 24; arr[5][5] = 11;
        for (int j = 1; j <= 5; j++) {  
            dp[5][j] = arr[5][j];  
        }  
        for (int i = 4; i >= 1; i--) {
            for (int j = 1; j <= i; j++) {
                if (dp[i + 1][j] > dp[i + 1][j + 1]) {
                    dp[i][j] = arr[i][j] + dp[i + 1][j];
                    path[i][j] = j; 
                } else {
                    dp[i][j] = arr[i][j] + dp[i + 1][j + 1];
                    path[i][j] = j + 1; 
                }
            }
        }
        int maxPath = dp[1][1];
        System.out.println(maxPath);
        int col = 1; 
        for (int row = 1; row <= 5; row++) {
            System.out.print(arr[row][col] + " ");
            col = path[row][col];
        }
    }
}

输出后为

86
13 8 26 15 24

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值