http://bailian.openjudge.cn/practice/1163/
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
(Figure 1)
图1显示了一个数字三角形。编写一个程序,计算在从顶部开始到底部某处的路由上传递的数字的最大总和。每一步可以向左斜下或向右斜下。
输入
您的程序将从标准输入读取。第一行包含一个整数N:三角形中的行数。以下N行描述了三角形的数据。三角形中的行数大于1,但小于等于100。三角形中的数字都是整数,介于0和99之间。
输出
您的程序将写入标准输出。最高和被写为整数。
输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
30
代码1:
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=Integer.parseInt(sc.nextLine());
int[][] aa=new int[n][n];
int jj=0;
for(int i=0;i<n;i++){
String[] split=sc.nextLine().split(" ");
jj++;
for(int j=0;j<jj;j++){
aa[i][j]=Integer.parseInt(split[j]);
}
}
// for(int[] i: aa){
// for(int j:i){
// System.out.print(j+" ");
// }
// System.out.println();
// }
int[] maxSum = new int[n*(1+n)/2];
// for (int i = 0; i < maxSum.length; i++) {
// System.out.print(maxSum[i]+" ");
// }
for(int i=n-1;i>=0;i--){
for(int j=0;j<=i;j++){
maxSum[j]=Math.max(maxSum[j],maxSum[j+1])+aa[i][j];
}
}
System.out.println(maxSum[0]);
}
}
代码2:`
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int r=in.nextInt();
int arr[][]=new int[r][r];
for (int i=0;i<r;i++){
for (int j=0;j<i+1;j++){
arr[i][j]=in.nextInt();
}
}
for (int i=r-2;i>=0;i--){
for (int j=0;j<i+1;j++){
arr[i][j]=Math.max(arr[i+1][j],arr[i+1][j+1])+arr[i][j];
}
}
System.out.println(arr[0][0]);
}
}