POJ1163 數字三角形java
The Triangle編程
Description網絡
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right. 函數
Input優化
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.code
Output遞歸
Your program is to write to standard output. The highest sum is written as an integer.ip
Sample Input項目管理
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Outputget
30
import java.util.Scanner; public class NumberTriangle { //final static int MAX_NUM = 100; static int[][] D; static int N; static int[][] aMaxSum; static int MaxSum(int r, int j) { if (r == N) { return D[r][j]; } if (aMaxSum[r + 1][j] == -1) { aMaxSum[r + 1][j] = MaxSum(r + 1, j); } if (aMaxSum[r + 1][j + 1] == -1) { aMaxSum[r + 1][j + 1] = MaxSum(r + 1, j + 1); } if(aMaxSum[r + 1][j] > aMaxSum[r + 1][j + 1]){ return aMaxSum[r + 1][j] + D[r][j]; }else{ return aMaxSum[r + 1][j + 1] + D[r][j]; } } public static void main(String[] args) { Scanner in = new Scanner(System.in); N = in.nextInt(); D = new int[N + 1][N + 1]; aMaxSum = new int[N + 1][N + 1]; for(int i = 0; i < N + 1; i++){ for(int j = 0; j < N + 1; j++){ aMaxSum[i][j] = -1; } } for(int i = 1; i <= N; i++){ for(int j = 1; j <= i; j++){ D[i][j] = in.nextInt(); } } System.out.println(MaxSum(1,1)); } }
這種將一個問題分解爲子問題遞歸求解,而且將中間結果保存以免重複計算的辦法,就叫作「動態規劃」。動態規劃一般用來求最優解,能用動態規劃解決的求最優解問題,必須知足最優解的每一個局部解也都是最優的。以上題爲例,最佳路徑上面的每一個數字到底部的那一段路徑,都是從該數字出發到達底部的最佳路徑。
實際上,遞歸的思想在編程時不必定都實現爲遞歸函數。
動態規劃通常可分爲線性動規、區域動規、樹形動規、揹包動規四類。
線性動規:攔截導彈、合唱隊形、挖地雷、建學校、劍客決鬥等;
區域動規:石子合併、加分二叉樹、統計單詞個數、炮兵佈陣等;
樹形動規:貪吃的九頭龍、二分查找樹(BST)、聚會的歡樂、數字三角形等;
揹包問題:01揹包問題、徹底揹包問題、分組揹包問題,二維揹包、裝箱問題、擠牛奶(同濟ACM第1132題)等;
實際應用領域:最短路徑問題、項目管理、網絡流優化等。