import java.util.List; import java.util.ArrayList; public class Main3 { public static void main(String[] args) { int[][] arr = { {8, 0, 0, 0, 0}, {12, 15, 0, 0, 0}, {3, 9, 6, 0, 0}, {8, 10, 5, 12, 0}, {16, 4, 18, 10, 9}, }; int res = getMaxSum(arr); System.out.println("最大数值是"+res); } public static int getMaxSum(int [][] arr){ int n = arr.length; int[][] maxSum=new int[n][n]; for (int i = 0; i <n ; i++) { maxSum[n-1][i] = arr[n-1][i]; } for (int i = n-2; i >=0; i--) { for (int j = 0; j <=i ; j++) { maxSum[i][j] = Math.max(maxSum[i+1][j]+arr[i][j],maxSum[i+1][j+1]+arr[i][j]); } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print(maxSum[i][j]+"\t"); } System.out.println(); } List<Integer> path = new ArrayList<Integer>(); int max = maxSum[0][0]; for (int i = 0; i<n-1; i++) { for (int j = 0; j <=i ; j++) { if ((max-arr[i][j])==maxSum[i+1][j+1]){ max = maxSum[i+1][j+1]; path.add(arr[i][j]); break; }else if ((max-arr[i][j])==maxSum[i+1][j]){ max = maxSum[i+1][j]; path.add(arr[i][j]); break; } } } for (int i = 0; i <n ; i++) { if (arr[n-1][i]==max){ path.add(arr[n-1][i]); } } for (int i = 0; i < path.size(); i++) { System.out.print(path.get(i)+"-"); } System.out.println(""); return maxSum[0][0]; } }
01-01
2622