您的位置:首页 > 其它

(动态规划)数字三角形问题

2013-12-24 12:56 169 查看
有如下一个数字三角形:


      3 8
     8 1 0
    2 7 4 4
   4 5 2 6 5
从定点出发,在每个节点可以选择向左走或者向右走,一直走到底层。试设计一种算法,计算从三角形顶端到底部的一条路径,是该路径经过的数字总和最大。
分析:这是一个动态规划问题,动态规划的思想就是在求解的过程中用到子问题,保存子问题的解,用空间换时间。
状态转移方程: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;
代码实现:
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];
}
}
没有实现的问题:求出最优解路径,这是今天接下来的工作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: