【问题标题】:How to assign n things to k pools如何将 n 个东西分配给 k 个池
【发布时间】:2015-11-30 04:04:49
【问题描述】:

谁能建议解决这个问题的动态编程方法?

您所在的社区学区需要您的帮助! 你的学区有 n 个正在上学的孩子 是k个学校。每个孩子需要上最多5分钟的学校 离他或她家的步行距离。这意味着每个 孩子只能上这 k 所学校的一部分。而且,每所学校都有 容量;用 ci 表示第 i 个学校的容量 ,并让总和 所有容量都等于n。给定有关容量的数据,以及 学区希望的 n 个孩子中每个孩子的合格学校列表 了解是否有有效的儿童分配到学校。设计一个 多项式算法来回答这个问题。

【问题讨论】:

  • 你能告诉我们你的想法和你到目前为止写的代码吗?
  • 在此处发布您的代码,以便我们检查出了什么问题
  • 我认为这个问题是多背包问题的一个版本。但是在这里,我只需要一个算法就可以理解。
  • 我建议你看看en.wikipedia.org/wiki/Assignment_problem——这可能不是动态编程问题。如果这是一个固定的练习或问题,那么考虑一下您所学的科目可能是一个想法 - 它可能已设置为检查或锻炼您对最近所教的内容的理解。

标签: algorithm dynamic-programming


【解决方案1】:

Max-flow min-cut(虽然不是DP方法)

  • source 连接到所有N 孩子
  • 将所有K 学校连接到sink
  • 将每个孩子与距离
  • 运行流算法
  • 如果 max-flow 等于 N 则存在有效分配

复杂性

例如在我们的例子中,Dinic 的算法在 O(VE log(V)) 中运行

V = 1 + N + K + 1

E in [N+K - N+K+(N*K)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2015-07-21
    • 2015-11-13
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多