最大限度地降低转型成本

时间:2013-03-06 12:33:38

标签: algorithm graph primes bijection

我提出了以下问题,但我无法找到解决方法。

说明:

有N个酒杯。假设每个酒杯都具有无限的容量。每个玻璃杯中的葡萄酒量是一个正的非零整数,单位是毫升。类型1的移动定义为从玻璃i向玻璃j转移1ml。 2型的移动定义为从玻璃中丢弃1ml。类型1的所有移动都有一个成本。类型2的所有移动都具有k的成本。 鉴于每种玻璃中的葡萄酒初始量,我们需要对这两种葡萄酒进行一些移动,以确保每种玻璃中的葡萄酒量是一个素数(或零)。打印此类转换的最低成本。

如何解决这个问题? 对于可能的解决方案的任何想法?

2 个答案:

答案 0 :(得分:1)

这是我的想法的粗略草图:

Prime数字的分发方式如x/ln(x)

还可以使用该页面上的边界来查找相对于该玻璃杯中葡萄酒量最接近的素数。

找到这些数字后,您可以将问题缩小为带有边的图形,这些边的成本代表从一个玻璃移动到另一个玻璃的值(您的类型1移动)。节点将是眼镜本身。

从这里开始,您将遇到图形问题,您必须考虑此图表中的最低成本路径。您的目标是找到最低成本的路径,从而导致所有眼镜都是素数的状态。

如果有防止你这样做的眼镜,请喝它们(2型移动),葡萄酒对你有好处:)

<强>更新

我将在这里写下我们在聊天中讨论的一些有效想法:

    提到了
  • bipartite matching,并且有可能将问题简化为
  • 您可以先在每两个眼镜(每两个眼镜的总和的主要分区)之间获得prime partitions,这些分区是图形中的边缘。然后,您还可以为类型2移动添加边。您可以以某种方式关联成本,然后运行minimum flow algorithm来解决问题
  • 问题也可能是您需要上面提到的所有这些边缘作为最佳解决方案可能并不意味着为每个眼镜采取最佳prime parititon

答案 1 :(得分:1)

此类问题可通过动态编程解决,类似于计算字符串的最小编辑距离,您可以使用Hirschberg's Algorithm解决该问题。

这里实际上有两个阶段。首先,您必须找到候选素数组合,然后计算每个候选者的最小编辑距离。编辑距离最短的那个是答案。

例如,假设你有总数如16 14 8.第一步是你必须枚举每个可能的素数组合:{37 0 0} {31 7 0}等。然后你用Hirschberg的算法来计算每个候选人的最小编辑距离。