算法訓練 數字三角形

問題描述

  (圖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]);
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章