我正在编写一个程序来模拟特定分时度假的成员如何申请他们的公寓。公寓仅适用于全年的某些“活动”,每个活动的持续时间不同(以天计算)。每个活动都有许多公寓,根据费用(每天的积分)分成几组。
我们可能还有一些公寓已经出租的情况,因此有些事件可能无法承认某种公寓类型。
现在我希望会员根据这个策略申请公寓:
我想知道问题是否与此处描述的问题类似:
http://en.wikipedia.org/wiki/Hungarian_algorithm
因为它(我想)可以将其构建为矩阵问题,其中每个条目都有与之相关的成本。
然而,区别在于,对于我的问题,我被允许在几个事件中使用相同的公寓 - 一旦用于一个事件,它就不会“花费”。此外,每个条目的成本并不是真正的一维,因为每个事件/公寓组合都有一些与之相关的天数和一些点 - 两者都应该最大化(但是优先考虑天数。)
作为一个例子,假设有三种公寓类型,每天花费75,100和125点,以及三个事件,持续时间为2天,10天和4天。让我们进一步说,许多公寓都被采用,因此可用性矩阵如下所示:
cost
75 100 125
2 True False True
days 10 False False True
4 True False True
我们还说用户有1250分可用。在这种情况下,解决方案是用户要求使用125点公寓进行为期10天的活动,而不是其他任何事情。
执行此操作的蛮力方式可能是递归算法:
我认为,当事件数量增加时,这将很快变得势不可挡,所以我想知道是否有任何算法能够以更便宜的方式解决这个问题?
答案 0 :(得分:0)
如果您可以访问http://en.wikipedia.org/wiki/Integer_programming的库,则可以尝试将其丢弃。
即使您只为每项活动选择了一项费用,因此您只是尝试选择涵盖尽可能多的总天数而不超出预算的事件组合,我认为这会减少到http://en.wikipedia.org/wiki/Knapsack_problem 。这意味着不可能通过最坏情况多项式时间算法(如匈牙利算法)精确求解。