1. 程式人生 > >藍橋杯-動態規劃-java演算法訓練 數字三角形

藍橋杯-動態規劃-java演算法訓練 數字三角形

問題描述   (圖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){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][]a = new int[n+1][((1+n)*n)/2+1];
		
		for(int i=1 ; i<=n ; i++){
			for(int j=1 ; j<=i ; j++){
				a[i][j] = sc.nextInt();
			}
		}
		
		for(int i=n ; i>=1 ; i--){
			for(int j=1 ; j<=i-1 ; j++){
				a[i-1][j]+= Math.max(a[i][j], a[i][j+1]);
			}
		}
		System.out.println(a[1][1]);
	}
}


希望能給大家一個參考  有更好的記得評論~~