思路:动态规划,更新/记忆二维数组
可以进一步改进成一维数组,但是嫌麻烦没写。
The Triangle
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 52288 | Accepted: 31580 |
Description
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
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.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output
30
package POJ_1163; //递推思想 //动态规划 import java.io.BufferedInputStream; import java.io.BufferedReader; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(new BufferedInputStream(System.in)); int[][] arr = new int[100][100]; int layer = sc.nextInt(); for(int i = 0;i<layer;i++){ for(int j = 0;j<=i;j++){ arr[i][j] = sc.nextInt(); } } for(int i = 1;i<layer;i++){ for(int j = 0;j<=i;j++){ if(j==0){ arr[i][j] += arr[i-1][j]; }else if(j==i){ arr[i][j] += arr[i-1][j-1]; }else arr[i][j] += arr[i-1][j-1] >= arr[i-1][j]?arr[i-1][j-1]:arr[i-1][j]; } } int max = arr[0][0]; for(int i = 0;i<layer;i++){ if(arr[layer-1][i]>max){ max = arr[layer-1][i]; } } System.out.println(max); } }