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) );
}
}
}