package test; import java.util.Scanner; /* * 数字三角形(POJ1163) 在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。 三角形的行数大于1小于等于100,数字为 0 - 99 输入格式: 5 //表示三角形的行数 接下来输入三角形 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 要求输出最大和 */ public class 递归 { public static int dpSolution(int[][] a,int i,int j){ if(i>=a.length) return 0; int left=dpSolution(a,i+1,j); int right=dpSolution(a,i+1,j+1); return Math.max(right,left)+a[i][j]; } public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { int n=scanner.nextInt(); int[][] a=new int[n][n]; for(int i=0;i<n;i++){ for(int j=0;j<=i;j++) a[i][j]=scanner.nextInt(); } System.out.println(dpSolution(a,0,0) ); } } }