根据价格优化酒店客房分配

时间:2016-10-05 13:21:29

标签: algorithm optimization model minimization price

这不是一个家庭作业问题。这是我们在构建在线产品时面临的一个问题。希望有人能告诉我这是否是一般算法问题。

假设我有4个房间的配置:
第一个房间 - 2人 - 800
第二个房间 - 3人 - 1400
第3个房间 - 2个人 - 1000个 第四个房间 - 2人 - 2000

假设我想以最低成本容纳4个人。 那么理想情况下我应该获得第一个房间+第三个房间

我尝试使用价格/人来解决它,但这会失败,因为它会产生第一个房间和第二个房间的输出

请告诉正确的算法来解决这个问题

1 个答案:

答案 0 :(得分:3)

正如Richard在评论中正确指出的那样,这与Knapsack相似。但是,很容易调整pseudo-polynomial dynamic programming solution from it

假设您有 n 个房间和 m 人。创建长度 m + 1 向量 C ,其元素初始化为 P [i] =∞ i> 0 P [0] = 0 i C 的条目包含找到的最佳选项,至少可以容纳 i 人。

现在执行三重循环:

  • 遍布每个房间。假设当前考虑的房间可以按 c 的价格持有 p 人员。

    • 对于每个 i = 0,...,m

      • 每个 j = i,...,min(m,i + p)

        • 更新 P [j] = min(P [j],P [i] + c)

检查 P [m] 以获取最佳解决方案的费用。

假设这里的所有数学成本都是常数,这具有复杂度Θ(n m 2

找到最佳房间组合,而不仅仅是它们的总成本,基本相同。在向量中,添加两个附加条目:一个用于更新条目的最后一个房间,另一个用于更新此条目的最后一个条目。