/**
* 三角塔问题。
* 设有一个三角形的数塔,顶点为根结点,每个结点有一个整数值。从顶点出发,可以向左走或向右走,
* 要求从根结点开始,请找出一条路径,使路径之和最大,只要输出路径的和。
*
*
*/
public class Triangle {
public static int find(ArrayList<int[]> list){
int I = list.size();
int[][] a = new int[I][I];
a[0][0] = list.get(0)[0];
for(int i=1; i<I; i++){
int length = list.get(i).length;
for(int j=0; j<length; j++){
int current = list.get(i)[j];
if(j == 0){
current += a[i-1][j];
}else if(j == length-1){
current += a[i-1][j-1];
}else{
current += a[i-1][j]>a[i-1][j-1] ? a[i-1][j] : a[i-1][j-1];
}
a[i][j] += current;
}
}
int max = 0;
for(int i=0; i<I; i++){
if(a[I-1][i] > max){
max = a[I-1][i];
}
}
return max;
}
/**
* @param args
*/
public static void main(String[] args) {
int[] a1 = {13};
int[] a2 = {11,8};
int[] a3 = {12,7, 26};
int[] a4 = {6, 14,15,8};
int[] a5 = {12,7, 13,24,11};
ArrayList<int[]> list = new ArrayList<int[]>();
list.add(a1);
list.add(a2);
list.add(a3);
list.add(a4);
list.add(a5);
int max = Triangle.find(list);
System.out.println(max);
}
}
三角塔问题
最新推荐文章于 2023-08-18 08:58:37 发布