1. 程式人生 > >2016藍橋杯演算法訓練——數字三角形

2016藍橋杯演算法訓練——數字三角形

數字三角形 問題描述   (圖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
程式碼:
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int[][] a = new int[n][n];
		for(int i=0;i<n;i++){
			for(int j=0;j<=i;j++){
				a[i][j] = in.nextInt();
			}
		}
		for(int i=n-1;i>=1;i--){
			for(int j=0;j<i;j++){
				a[i-1][j]+=Math.max(a[i][j], a[i][j+1]);//將i行最大的數加到i-1行所對應的數上,這樣,等加到第一個數時,就是最大路徑上數的和
			}
		}
		System.out.println(a[0][0]);
	}
}