数字三角形

数字三角形dfs

package _9动规;

import java.util.Scanner;

/**
 * 数字三角形(POJ1163)<br>
 *
 * 在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。<br>
 * 路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。<br>
 * 三角形的行数大于1小于等于100,数字为 0 - 99<br>
 * 输入格式:<br>
 * 5 //表示三角形的行数 接下来输入三角形<br>
 *      7<br>
 *     3 8<br>
 *    8 1 0<br>
 *   2 7 4 4<br>
 *  4 5 2 6 5<br>
 * 要求输出最大和<br>
 *    // int[][] triangle = {
    //     {7},
    //     {3, 8},
    //     {8, 1, 0},
    //     {2, 7, 4, 4},
    //     {4, 5, 2, 6, 5},
    //     {4, 5, 2, 6, 5, 7},
    //     {4, 13, 12, 88, 6, 6, 5},
    //     {3, 8, 7, 11, 9, 22, 66, 3},*/
public class 数字三角形dfs {
public static void main(String[] args) {
	/*Scanner in=new Scanner(System.in);
	int n=in.nextInt();
	int [][]triangle=new int[n][];
	for(int i=0;i<n;i++) {
		triangle[i]=new int[i+1];
		for(int j=0;j<i+1;j++) {
			triangle[i][j]=in.nextInt();
		}
}*/
        int[][] triangle = {
         {7},
         {3, 8},
         {8, 1, 0},
         {2, 7, 4, 4},
         {4, 5, 2, 6, 5},
         {4, 5, 2, 6, 5, 7},
         {4, 13, 12, 88, 6, 6, 5},
         {3, 8, 7, 11, 9, 22, 66, 3},
        };
  System.out.println(maxSumUsingDp(triangle, 0, 0));//传入数组 ,行下标,列下标
}
private static int  maxSumUsingDp(int[][] triangle, int i, int j) {
    int rowIndex = triangle.length;//行数
    if (i == rowIndex - 1) {//如果到底了直接返回最后一行
      return triangle[i][j];
    } else {//否则进行递归
      //顶点的值+max(左侧支线的最大值,右侧支路的最大值)
      return triangle[i][j]
          +Math.max(maxSumUsingDp(triangle, i + 1, j),//左边行加
        		  (maxSumUsingDp(triangle, i + 1, j + 1)));//右边列加
    }
  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金石不渝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值