問題描述
(圖3.1-1)示出了一個數字三角形。 請編一個程序計算從頂至底的某處的一條路
徑,使該路徑所經過的數字的總和最大。
●每一步可沿左斜線向下或右斜線向下走;
●1<三角形行數≤100;
●三角形中的數字爲整數0,1,…99;
.
(圖3.1-1)
輸入格式
文件中首先讀到的是三角形的行數。
接下來描述整個三角形
輸出格式
最大總和(整數)
樣例輸入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
樣例輸出
30
思路:動態規劃,從倒數第二行開始,獲取每一個數字與下一行相加可得的最大值,層層向上。(通過arr[i][j]=Math.max(arr[i+1][j],arr[i+1][j+1]))
如:第一次獲取後可得:
7
3 8
8 1 0
7 12 10 10
直到頂層時,其結果就爲最大值。
代碼實現:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int [][] arr = new int[n][n];
for(int i=0;i<n;i++)
{
for(int j = 0;j<=i;j++)
arr[i][j]=sc.nextInt();
}
int sum = 0;
for(int i = n-2;i>=0;i--)
{
for (int j=0;j<=i;j++)
{
arr[i][j]+=Math.max(arr[i+1][j],arr[i+1][j+1]);
}
}
System.out.println(arr[0][0]);
}
}