【问题标题】:How to find the largest sum with the smallest possible path in a tetrahedron of integers?如何在整数四面体中找到具有最小可能路径的最大和?
【发布时间】:2015-07-08 02:12:01
【问题描述】:

首先是问题,

假设一个整数可以表示为一个完美的球体,其中球体的值等于它所包含的整数。球体被组织成一个四面体金字塔,其中 N = 边长,N 介于 1 和 15 之间。选择(可能为空的)球体子集,以使它们的值之和最大化。请注意,球体可以保持负值,因此不一定需要拾取每个球体。我们不想打乱金字塔,所以我们不能在不先拿下它上面的那些之前拿下任何一个球体。

输入格式:

第 1 行:整数 N

第 2 行:N(N+1)/2+1

输出格式:

第 1 行:一个整数,可实现的值的最大总和

示例输入:

3
5
-2 -7 
-3
1 0 8
0 3
2

样本输出:

8

这是迄今为止我所理解的示例解决方案:

最佳解决方案在下图中以粗体显示。取 1 并不聪明,因为这需要取 -2,从而减少总数。应该选择 8、3 和 2,因为它们超过 -3 和 -7。

我的问题是,

如何存储输入以保持正确的顺序?或者我什至需要?我正在尝试使用队列,但我的程序变得非常冗长,因为我必须找到每个可能路径的总和,然后比较每个总和以找到最大值。我也很难将数据分解成正确的模式,所以我不会重新计算一个数字或把一个数字弄乱。有没有更有效的方法来做到这一点?在这种情况下,Dijkstra 的算法是否有用?如果是这样,那怎么办?任何帮助是极大的赞赏!!

【问题讨论】:

    标签: c++ algorithm sorting data-structures dijkstra


    【解决方案1】:

    我会使用 3 维数组。使用您的示例:

    A[0][0][0] = 5
    
    A[1][0][0] = -2
    A[1][1][0] = -3
    A[1][0][1] = -7
    
    A[2][0][0] = 1
    A[2][1][0] = 0
    A[2][2][0] = 2
    A[2][0][0] = 0
    A[2][1][0] = 3
    A[2][0][0] = 8
    

    “上面”的关系只是索引算术的问题:[ia, ja, ka] 在上面 [ ia+1, ja, ka], [ia+1, j a+1, ka] 和 [ia+1, ja, ka+1]。

    【讨论】:

    • 我看看如何使用多维数组。我会试一试,但算术不会取决于数字的顺序。对于不同的问题,如果数字持有不同的值,那么您将需要再次找到最大数字并且需要不同的算术,不是吗?我怎样才能为每个独特的输入找到它?
    • @KarmaPimp:我不确定你所说的“不同的算术”是什么意思。我已经描述了一种数据结构,而不是一种搜索算法。如果您在这个问题的每个部分都需要帮助,那么您应该解决更简单的问题,直到这个问题看起来不那么具有挑战性。
    猜你喜欢
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2020-09-19
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多