有以下一个数字三角形:
java
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5算法
从定点出发,在每一个节点能够选择向左走或者向右走,一直走到底层。试设计一种算法,计算从三角形顶端到底部的一条路径,是该路径通过的数字总和最大。ide
分析:这是一个动态规划问题,动态规划的思想就是在求解的过程当中用到子问题,保存子问题的解,用空间换时间。spa
状态转移方程:tri[i][j]=tri[i][j]+max{tri[i+1][j],tri[i+1][j+1]};设计
其中i=n-2,n-3,...0,0<=j<=i;it
代码实现:class
public class DynamicProgram { //数字三角形问题 private static final int NUM =100; /** * tri为数字三角形矩阵 * n为数字三角形的层 * */ public int numbertri(int[][] tri,int n){ int i ,j; for(i= n-2;i>=0;i--){ for(j=0;j<=i;j++){ if(tri[i+1][j]>tri[i+1][j+1]){ tri[i][j] += tri[i+1][j]; }else tri[i][j] +=tri[i+1][j+1]; } } return tri[0][0]; } }
没有实现的问题:求出最优解路径,这是今天接下来的工做static