数塔问题及扩展
来源:互联网 发布:pdf阅读器推荐 知乎 编辑:程序博客网 时间:2024/06/05 17:11
转自:http://hi.baidu.com/bellgrade/blog/item/744365fa3ab7956e034f56d6.html
数塔问题描述:
如下图所示的数塔,从顶部出发到底层,试着找出一条路径使该路径所走过的数值和最大。
上图中问题解路径就是
使用动态规划求解:
1、 阶段划分
从数塔特点看,应该自下而上逐层决策。
第五层的五个数,做如下的4次决策。
对经过第四层2的路径,第五层的19,7中选择了19
对经过第四层18的路径,第五层的10,7中选择了10
对经过第四层9的路径,第五层的10,4中选择了10
对经过第四层5的路径,第五层的4,16中选择了16
这可以看作是一次决策的过程,一次递推和降阶过程,因为它使5层的问题变为4层的子问题。
递推出第4层与第5层的和为:
21(2+19), 28(18,10), 19(9+10), 21(5+16),
用同样的方法依次类推,将4层问题变成3层,继而变为1阶,就能得到最优解了。
2、 存储,求解
原始信息存储:层数n和每一层的数据存在data二维数组中。
二维数组d存储内容如下:
d[n][j]=data[n][j] j=1,2,…n
d[i][j]=max(d[i+1][j],d[i+1][j+1])+data[i][j]
最后d[1][1]就是最优路径的值。
3、 最优解路径的求解
data数组存储内容 数组d存储的内容
9 59
12 15 50 49
10 6 8 38 34 29
2 18 9 5 21 28 19 21
19 7 10 4 16 19 7 10 4 16
路径的输出:data与d数组对照看
输出d[1][1] 中的9
b=d[1][1] – datap[1][1]=59-9=50
b与d[2][1],d[2][2]比较,b与d[2][1]相等(50),则输出data[2][1]=12
……依次类推就能得到完整路径
。
9+12+10+18+10=59扩展:
挖地雷(Mine.pas)
在一个地图上有N个地窖(N<=200),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径,并规定路径都是单向的。某人可以从任一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使他能挖到最多的地雷。
【输入格式】
N {地窖的个数}
W1,W2,……WN {每个地窖中的地雷数}
X1,Y1 {表示从X1可到Y1}
X2,Y2
……
0 ,0 {表示输入结束}
【输出格式】
K1——K2——……——Kv {挖地雷的顺序}
MAX {最多挖出的地雷数}
【输入样例】Mine.in
6
5 10 20 5 45
1 2
1 4
2 4
3 4
4 5
4 6
5 6
0 0
【输出样例】Mine.out
3-4-5-6
34这实际是一个有向无环图,每个节点为地雷数,解法应该和上边的数塔类似。
- 数塔问题及扩展
- LIS问题及扩展
- 编程之美2.1求二进制数中1的个数及扩展问题Java版
- 编程之美2.12快速寻找满足条件的两个数及扩展问题Java版
- 水王问题及扩展
- jmeter版本及扩展问题
- 次球称重的问题及扩展
- 扩展CListCtrl及需要注意的问题
- 最长公共子序列问题及扩展
- 八数码问题可解性及扩展
- 字符串是否包含问题及扩展
- 有符号数转无符号数的扩展问题
- 编程之美4.3扩展问题(卡特兰数)
- 浮点数的存储及输出问题
- 浮点数的存储及输出问题
- 浮点数的存储及输出问题
- MySQL数据库连接数问题及处理
- 边看边写(排列组合及丑数问题 )
- break与continue例题
- 什么是插值算法?
- 大学总结(三)即大二结束
- hello
- vacantcell缓存分析
- 数塔问题及扩展
- ansys中KBC设置
- nsubst,deltim和autots
- 回调函数声明与调用
- XMLDocument转成字符串[javascript]
- iphone 模拟器 XCode gdb 查找无法定位的程序崩溃
- Google Protocol Buffer 学习
- 安装Fedora 15后需做的25件事情
- java容器