我提出了以下问题,但我无法找到解决方法。
说明:
有N个酒杯。假设每个酒杯都具有无限的容量。每个玻璃杯中的葡萄酒量是一个正的非零整数,单位是毫升。类型1的移动定义为从玻璃i向玻璃j转移1ml。 2型的移动定义为从玻璃中丢弃1ml。类型1的所有移动都有一个成本。类型2的所有移动都具有k的成本。 鉴于每种玻璃中的葡萄酒初始量,我们需要对这两种葡萄酒进行一些移动,以确保每种玻璃中的葡萄酒量是一个素数(或零)。打印此类转换的最低成本。
如何解决这个问题? 对于可能的解决方案的任何想法?
答案 0 :(得分:1)
这是我的想法的粗略草图:
Prime数字的分发方式如x/ln(x)。
还可以使用该页面上的边界来查找相对于该玻璃杯中葡萄酒量最接近的素数。
找到这些数字后,您可以将问题缩小为带有边的图形,这些边的成本代表从一个玻璃移动到另一个玻璃的值(您的类型1移动)。节点将是眼镜本身。
从这里开始,您将遇到图形问题,您必须考虑此图表中的最低成本路径。您的目标是找到最低成本的路径,从而导致所有眼镜都是素数的状态。
如果有防止你这样做的眼镜,请喝它们(2型移动),葡萄酒对你有好处:)
<强>更新强>:
我将在这里写下我们在聊天中讨论的一些有效想法:
答案 1 :(得分:1)
此类问题可通过动态编程解决,类似于计算字符串的最小编辑距离,您可以使用Hirschberg's Algorithm解决该问题。
这里实际上有两个阶段。首先,您必须找到候选素数组合,然后计算每个候选者的最小编辑距离。编辑距离最短的那个是答案。
例如,假设你有总数如16 14 8.第一步是你必须枚举每个可能的素数组合:{37 0 0} {31 7 0}等。然后你用Hirschberg的算法来计算每个候选人的最小编辑距离。