数字三角形问题
2013-12-08 18:52
197 查看
描述:给定一个由n 行数字组成的数字三角形(例如下图)。输出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
Java
public class RecMaxNum{ public static int getRecMaxNum(int[][] rec){ /* m[i][j]: the max value path which is ended of rec[i][j] pre[i][j]: the note of pre value index */ int n = rec.length; int[][] m = new int ; int[][] pre = new int ; //init m[0][0] = rec[0][0]; //dynamic programming for(int i = 1; i < n; i ++){ m[i][0] = m[i-1][0] + rec[i][0]; pre[i][0] = 1; for(int j = 1; j < i; j ++){ if(m[i-1][j] + rec[i][j] < m[i-1][j-1] + rec[i][j]){ m[i][j] = m[i-1][j-1] + rec[i][j]; pre[i][j] = -1; } else{ m[i][j] = m[i-1][j] + rec[i][j]; pre[i][j] = 1; } } m[i][i] = m[i-1][i-1] + rec[i][i]; pre[i][i] = -1; } int k = 0; for(int j = 1; j < n; j ++){ if(m[n-1][k] < m[n-1][j]){ k = j; } } //build the path StringBuffer s = new StringBuffer(""); for(int i = n-1, j = k; i >= 0 && j >= 0;){ s.insert(0, Integer.toString(rec[i][j]) + " "); if(pre[i][j] == -1){ i --; j --; } else{ i --; } } System.out.println(s); return m[n-1][k]; } public static void main(String[] args) { int[][] rec = new int[5][5]; for(int i = 0; i < 5; i ++){ for(int j = 0; j <= i; j ++){ rec[i][j] = (int)(Math.random() * 10); System.out.print(rec[i][j] + " "); } System.out.println(); } System.out.println(getRecMaxNum(rec)); } }
Java
相关文章推荐
- SDUT 1730 - 数字三角形问题
- 动态规划 问题之数字三角形(倒序递推)
- 数字三角形问题
- 三角形数字路径最大值问题
- 算法 数字三角形问题
- SDUToj1730数字三角形问题
- 南邮 OJ 1226 数字三角形问题
- 新数字三角形问题
- sdut 1730 数字三角形问题
- sdut 1730 数字三角形问题
- DP经典应用(一)数字三角形问题
- 数字三角形问题(DP)
- 数字三角形问题
- 数字三角形问题
- SDUT 1730 数字三角形问题
- POJ3176:Cow Bowling(数字三角形问题)
- sdut1730 数字三角形问题(dp入门题)
- 【算法】数字三角形问题
- 动态规划--数字三角形问题
- 三角形数字问题