以下是问题陈述:
我有 m 巧克力棒,整数长度, n 孩子们 想要整数巧克力。巧克力总需求量 孩子小于或等于巧克力总量 你有。你需要编写一个分配巧克力的算法 通过对栏杆进行最少的切割来完成孩子们。
例如,对于 M = {1,3,7}, N = {1,3,4},最少的切割次数为1。
我没有任何关于算法的正式经验,任何人都可以给我任何关于我应该开始阅读的提示,以便有效地解决这个问题吗?
答案 0 :(得分:0)
此任务可以简化为解决几个背包问题。为了解决它们,通常使用贪婪搜索的原则,并且剪切的数量是搜索的标准。
算法的第一个明显步骤是检查平衡。 第二步是安排条形阵列和巧克力需求,这将简化进一步的计算。这实现了贪婪搜索的原则。 第三个明显的步骤是找到并使用所有条形图,其大小与需求一致。
下一步是找到并使用满足需求的条形图的所有组合。此任务需要按需要的降序进行“贪婪”搜索,这将继续进行进一步的计算。这个标准不是最优的,但它允许形成一个基本的解决方案。
如果不是所有的孩子都收到了巧克力,那么切口变得明显。应根据图块的下降大小进行搜索。首先,应该检查所有可能性,一次给两个孩子切割瓷砖,然后相同,但如果使用一个现有瓷砖,等等。 之后有一个明显的变体“一个切割 - 一个需要”,允许形成基础变体。但是如果有剩余的计算资源,可以先使用它们来计算“两个狭缝 - 三个需求”等类型的选项。
进一步优化包括返回以下变体的步骤和计算。