【问题标题】:Ideas to solve the following解决以下问题的想法
【发布时间】:2012-06-14 18:09:36
【问题描述】:

图书馆中有N 的书籍,其中ith 书籍的页数由b_i 提供。这些书籍将分发给K 学生,以便对于给定的输入,分配给任何学生的书籍中的最大页数总和与分配给任何学生的书籍中的最小页数总和之间的差异是最小的。书籍也按一定的顺序排列,这个顺序永远不能改变。

例如:

假设B[] 包含每本书的页数。

那么对于N=6K=3B={3,7,8,2,6,4},输出将是0,因为我们可以将第 1 册和第 2 册给学生 1,将第 3 册和第 4 册给第 2 学生,剩下的给第 3 学生。这使得学生 1 为 10 页,2 为 10 页,3 为 10 页,因此差异为 0

同样,B={3,6,8,2,6,4} 则最小差值为 1。

【问题讨论】:

  • 这是作业吗?
  • 我不在乎这是否是家庭作业。这对我来说就像一个 NP 问题,如果不是,我很想知道一个优雅的解决方案。感觉有点像子集总和问题,但我们甚至不知道我们要提前寻找的总和。另一方面,它是一个有序集,所以这可能会有所帮助。当然,这可能应该移动到:cstheory.stackexchange.com
  • 这不是家庭作业!这是 Directi 的最后一道面试题。

标签: algorithm


【解决方案1】:

这是一个贪婪的O(nklogk) 算法的想法,让你开始。首先,将书籍从大到小排序。然后取出最大的未分配的书并将其分配给总页数最少的孩子。继续这样做,直到所有的书都被分配。每个图书作业都要求您根据孩子的总页数对他们进行排序。

【讨论】:

  • 你不能把书从大到小排序:“而且书是按一定的顺序排列的,这个顺序永远不能改变。”
  • 这很愚蠢。您可以随时获取书籍信息,对其进行解析,找出哪些书籍在哪里,然后按顺序分配给孩子们。
  • 不确定你在说什么。我的理解是,您必须将书籍作为块分配给学生。例如,您无法获取图书 1、2 和 7。您必须获取某个范围内的每一本书。因此,您需要使用整个集合中的所有书籍,并且每个学生必须按照book 的顺序获取所有书籍。因此,学生 1 必须获得书籍 [1,x1),学生 2 必须获得书籍 [x1,x2),依此类推。你可能是对的,我只是不明白你的算法。
  • 不限制维护书的顺序,这是一个NP完全问题。有了它,就是DP问题。
  • 阿奎那是对的。学生应该只分块分配书籍。顺序不能更改。
【解决方案2】:

w=B 中页面的总和,您应该计算 w/n 以找到有限的答案。如果 w/n 是整数,则意味着您有这个问题。是否有 x 个元素的总和等于 w/n .这似乎是NP问题的

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 2021-06-30
    • 2014-05-03
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    相关资源
    最近更新 更多