文章首发
{% cq %}
动态规划
(Dynamic programming)
{% endcq %}
数塔问题
有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的值最大。

输入
输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。
输出
对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
样例输入
1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
30
分析
{% blockquote David Levithan, Wide Awake %}
这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是一个非常庞大的数目(2^30= 1024^3 > 10^9=10亿)~~~
从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。
同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。<

本文介绍了如何使用动态规划解决数塔问题,通过自底向上的计算方法找到从数塔顶部到底部的最大路径和。文章提供了问题的输入输出格式,并通过样例解释了分析思路,强调了避免枚举法的高复杂度,推荐从倒数第二层开始向上求解,确保每次都选择最优路径。
1万+

被折叠的 条评论
为什么被折叠?



