【蓝桥杯省赛JavaB组真题详解】数字三角形(2020)

题目描述

数字三角形 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。 对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分 输入格式 输入的第一行包含一个整数 N (1 < N ≤ 100),表示三角形的行数。下面的N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数 输出格式 输出一个整数 输入样例

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

输出样例 27

解题思路

递归

import java.util.Scanner;

public class Digui {
          
   
	static int[][] arr=new int [100][100]; 
	static int max = 0,n;
	public static void main(String[] args) {
          
   
		Scanner sc = new Scanner(System.in);
		n=sc.nextInt();
		for(int i = 0;i < n ; i++) {
          
   
			for (int j = 0; j <= i; j++) {
          
   
				arr[i][j]=sc.nextInt();
			}
		}
		dfs(0,0,0,0,0);
		System.out.println(max);
		sc.close();
	}
	
	public static void dfs(int x,int y,int left,int right,int sum) {
          
   
		if(x==(n-1)) {
          
   
			sum+=arr[x][y];
			if(sum>max&&Math.abs(left-right)<=1) {
          
   
				max=sum;
			}
			return;
		}	
		dfs(x+1, y,left+1,right,sum+arr[x][y]);
		dfs(x+1, y+1,left,right+1,sum+arr[x][y]);	
		return;
	}

}
经验分享 程序员 微信小程序 职场和发展