藍橋杯-動態規劃-java演算法訓練 數字三角形
阿新 • • 發佈:2019-02-02
問題描述
(圖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 動態規劃的思想源於遞迴,是一種問題轉化策略。基於遞迴的問題轉化策略有很 多,他們相互之間也不是很容易區分,其實講半天動態規劃是什麼 ,感覺還是不會做題,還是需要多看一些例子 ,從中體會動態規劃,也許這種思路說不出來,但是心裡還是很清楚的,
希望能給大家一個參考 有更好的記得評論~~
徑,使該路徑所經過的數字的總和最大。
●每一步可沿左斜線向下或右斜線向下走;
●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]); } }
希望能給大家一個參考 有更好的記得評論~~