Advertisement

花店橱窗设计c++编程语言

阅读量:

这道题其实并不难


首先,这道题目可以被视作是对数字三角形问题的进一步拓展。(若进行深入思考,这一理解是较为直观的)

状态:定义f[i][j]表示从起点至第i行第j列位置所获得的最大路径值;(该数值包含此前所有路径上的累计值)

随后便是具体的解题思路:

复制代码
    f[i + 1][k] = max(f[i + 1][k], f[i][j] + a[i + 1][k]);
    
    

首先,我们将状态转移方程呈现出来~~

接下来,我们以示例为基础进行说明:

下载.png

初始阶段,我们需要将f[i][j]的值设定为a[i][j],因为在尚未进行任何操作的情况下,当前的最大值即为自身。
通过观察这张图表可以发现,当i等于1时,下一个可能的位置包括21、-4、10以及23这几个点;
由此可以看出,仅依靠两层循环来遍历每一个f[i][j]是无法满足需求的。在更新当前数值的过程中,还需要借助一层额外的循环来寻找最优解,因此需要再增加一层循环,具体的实现方式如下:

复制代码
    for (int i = 1; i <

全部评论 (0)

还没有任何评论哟~