Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在一个整数四面体中找到可能路径最小的最大和?_C++_Algorithm_Sorting_Data Structures_Dijkstra - Fatal编程技术网

C++ 如何在一个整数四面体中找到可能路径最小的最大和?

C++ 如何在一个整数四面体中找到可能路径最小的最大和?,c++,algorithm,sorting,data-structures,dijkstra,C++,Algorithm,Sorting,Data Structures,Dijkstra,首先是问题, 假设一个整数可以表示为一个完美球体,其中球体的值等于它包含的整数。球体被组织成一个四面体金字塔,其中N=侧面的长度,N在1到15之间。拾取球体的子集(可能为空),使其值之和最大化。请注意,球体可以保持负值,因此不一定需要拾取每个球体。我们不想破坏金字塔,所以我们不能在不先取上面的球体的情况下取任何一个球体 输入格式: 第1行:整数N 第2行:N(N+1)/2+1 输出格式: 第1行:一个整数,可以达到的最大值之和 样本输入: 3 5 -2 -7 -3 1 0 8 0 3 2 样

首先是问题,

假设一个整数可以表示为一个完美球体,其中球体的值等于它包含的整数。球体被组织成一个四面体金字塔,其中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的算法在这种情况下有用吗?如果是,那怎么办?非常感谢您的帮助

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

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,ja+1,ka]和[ia+1,ja,ka+1]。

我明白了使用多维数组会带来什么。我会试一试,但算术不是取决于数字的顺序吗。对于一个不同的问题,如果数字包含不同的值,那么你需要再次找到最大值,并且需要一个不同的算法,不是吗?我怎样才能为每个独特的输入找到它呢?@KarmaPimp:我不知道你说的“不同的算术”是什么意思。我描述的是数据结构,而不是搜索算法。如果你在这个问题的每一个方面都需要帮助,那么你应该解决更简单的问题,直到这个问题看起来不那么具有挑战性为止。