这不是一个家庭作业问题。这是我们在构建在线产品时面临的一个问题。希望有人能告诉我这是否是一般算法问题。
假设我有4个房间的配置:
第一个房间 - 2人 - 800
第二个房间 - 3人 - 1400
第3个房间 - 2个人 - 1000个
第四个房间 - 2人 - 2000
假设我想以最低成本容纳4个人。 那么理想情况下我应该获得第一个房间+第三个房间
我尝试使用价格/人来解决它,但这会失败,因为它会产生第一个房间和第二个房间的输出
请告诉正确的算法来解决这个问题
答案 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 [m] 以获取最佳解决方案的费用。
假设这里的所有数学成本都是常数,这具有复杂度Θ(n m 2 )。
找到最佳房间组合,而不仅仅是它们的总成本,基本相同。在向量中,添加两个附加条目:一个用于更新条目的最后一个房间,另一个用于更新此条目的最后一个条目。