煮沸蔬菜的最小切割数量

时间:2014-10-03 10:09:13

标签: algorithm

我正在努力解决这个问题 https://warmup.kattis.com/problems/vegetables

我想知道的是应该如何将蔬菜分成两部分。 如果我使wleft = wright = 1/2 * w,则无法获得与样本相同的输出。

在提示/提示/洞察中,他们写了 洞察力:所有切成一片的蔬菜都具有相同的重量。

但这对我没有任何意义。 1000 1400 会给我的 1400 - > 700 700 1000 没有比例是700/1000所以我们必须划分1000 1400 - > 700 700 1000 - > 500 500 现在我不知道我应该如何划分,因为在这种情况下我只能做3次分裂。

3 个答案:

答案 0 :(得分:1)

这归结为广泛优先搜索削减数量以及不同可能的削减。首先,使用零切割检查解决方案,然后使用一个切割等检查所有解决方案,直到找到一个大小足够相等的解决方案。

注意:

  • 在考虑下一次切割时切割最小的蔬菜是没有意义的,因为它只会使比率变差。
  • 所有蔬菜的任何解决方案也是其中任何两种蔬菜的解决方案。您可以使用它来修剪搜索,以避免在无望的情况下搜索最佳剪辑。
  • 如果你想象一个图形,你有一个根顶点,每个蔬菜都是完整的。然后每个边缘切割一个蔬菜,导致一个新的顶点。起初,这看起来像一棵树,但它只是一个DAG。切割两个蔬菜的顺序无关紧要,切割两个蔬菜后,路径将再次收敛到一个顶点。确保你不要尝试两次相同的顶点,因为它会炸掉你必须处理的可能的切割次数。

结合上述三个注释,唯一值得考虑的优势是切割大量蔬菜的最大蔬菜。使用这些知识,您应该能够有效地实现此算法。

答案 1 :(得分:0)

问题不在于所有蔬菜应该分成两块。

它只告诉你你应该有更小的平均尺寸"最少的削减数量。

所以,如果一块蔬菜(即Brocolly)重2克,一块马铃薯重6克,那么,如果你不使用切口,平均值为4,比例为3比1。

但我在土豆中使用了3个切块,然后你得到4个2克,比例为1 ...

希望它有所帮助。

答案 2 :(得分:0)

我可以在my Github找到使用python3解决此问题的方法。

如果您想首先尝试自己,我会专注于创建一个解决方案,您只需切割最大的一块并跟踪原始重量,这样您就可以在重复解决方案的同时“重新切割”新部件中的蔬菜。