【发布时间】:2015-06-15 09:57:07
【问题描述】:
假设我们有 N 个工作和 K 个工人来完成这些工作。但是对于某些工作,我们需要 2 名员工,而对于某些工作,我们只需要一名。员工也不能做所有的工作。例如,工人 1 可以做工作 1,2 和 5,而不能做工作 3 和 4。此外,如果我们雇用工人 1 做工作 1,那么我们希望他做工作 2 和 5,因为我们已经付给了他工资。
例如,假设我们有 5 个工作和 6 个工人。对于工作 1,2 和 4,我们需要 2 个男人,而对于工作 3 和 5,我们只需要一个。这是每个工人可以做的工作清单和他需要的工资。
Worker 1 can do jobs 1,3,5 and he requires 1000 dollars.
Worker 2 can do jobs 1,5 and he requires 2000 dollars.
Worker 3 can do jobs 1,2 and he requires 1500 dollars.
Worker 4 can do jobs 2,4 and he requires 2500 dollars.
Worker 5 can do jobs 4,5 and he requires 1500 dollars.
Worker 6 can do jobs 3,5 and he requires 1000 dollars.
经过一点点计算和逻辑思考,我们可以得出结论,我们必须雇用工人 1,3,4 和 5,这意味着我们需要支付的最低工资是:1000+1500+2500+1500=5500 美元。
但是我们怎样才能找到一个有效的算法来输出这个数量呢?这不知何故让我想起了匈牙利算法,但是所有这些额外的限制让我无法应用它。
【问题讨论】:
-
你真的需要解决这个问题吗?它看起来像一个家庭作业问题,并且您正在尝试执行复杂的优化。如果是这样,请以缓慢/简单的方式进行并提交。我怀疑这个讨论会很复杂和/或耗时。
-
@MooingDuck 这不是作业问题,这是过去的比赛问题。
-
“另外,如果我们雇佣工人 1 从事工作 1,那么我们希望他从事工作 2 和 5,因为我们已经支付了他的工资。”你不会为每份工作单独支付他的工资吗?还是说他会以 1000 美元的价格完成这三项工作?
-
@Yay295 他将以 1000 美元的价格完成所有三项工作,但我们不能以 333.33 美元的价格雇佣他只完成一项工作。为了更清楚,假设我们支付他每日工资。但在那一天,他做了各种各样的工作(当然,他能做的所有工作)。最后,我们希望完成所有工作。
-
N 和 K 可以有多大?
标签: algorithm optimization minimum hungarian-algorithm