Advertisement

UVa 307 Sticks

阅读量:

题目:略

思路:

1 原本的最小长度应属于当前所有木棍中最长至总和的一个范围
2 剪枝非常重要 在本题中未给定明确的数据范围 下 在这些剪枝方法中每个都会导致超时(TLE)

算法解释:
通过排序木棍来实现快速求解问题。
为了辅助下列代码中/****/注释这行的具体剪枝操作而进行排序处理显得尤为重要。
假设我们面对的是九根木棒其长度分别为5、2、1、5、2、1、5、2、1。
如果不进行排序处理,在最终结果计算时可能会得到如下的组合:例如取用两根长为2和两根长为1的木棒相加即得总长度为6(即计算式为:2 + 2 +
1 +
1 =
6)。这种情况下会导致left变量与sum/(end+
1)之间的等式关系无法成立从而引发不必要的剪枝错误发生。
这个递归算法的本质就是在确定了一个最小长度之后不再继续探索更小的可能性从而能够显著减少不必要的计算开销和搜索空间规模以提高算法运行效率和性能表现水平。
如果将这些木棒按照降序排列则会得到如下序列:5,5,5,3,3,3,3,3,3(以上举例仅为说明问题具体情形)。在这种情况下我们可以选择以下几种组合方式:例如取用三个长为5和三个长为3的情况(即计算式为:5+

3=
9)或者取用两个长为4和四个长为4的情况(即计算式为:

6=
8)。然而在实际操作过程中由于存在多种不同的组合可能性因此需要采取

全部评论 (0)

还没有任何评论哟~