【发布时间】: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