我有一个问题要解决,但没有看到任何最佳解决方案:/问题是:
我有 n 个工人和 k 个工作。每项工作都由指定数量的工人完成,每个工人对每项工作都有自己的幸福程度。我必须制定一个工作时间表,以便工人尽可能快乐。所以,我有 int[n,k] (k >= n) 的数组 a1。第 i 行的第 k 列包含第 i 个工人对第 k 个工作的偏好(数字从 0 到 10)。我还有 int[k] 的数组 a2,其中第 i 个元素包含将从事这项工作的人数。每个工人要做相同数量的工作。我必须找到最大可能的快乐总和,知道 n >= max(a2)。我的解决方案是使用递归。为第一个工作组合选择第一个工人,将偏好添加到总和中,检查总和是否高于已找到的最大值,如果是,则转到下一个工人。回来时,检查第一个工人等的下一个组合。这适用于少量工人,但必须有很高的计算复杂度才能解决更大的问题。您对更好的解决方案有任何想法吗?
PS。另一个站点的人推荐我使用匈牙利算法,但它假设 n == k,我不知道如何使它与 n <= k 一起使用
PS2 一个例子:
a1:
job1 job2 job3 job4
wokrer1 1 3 4 2
worker2 9 8 1 2
worker3 6 7 8 9
a2:
job1 job2 job3 job4
count 1 2 2 1
example solution:
worker1: job2, job3 (7)
worker2: job1, job2 (17)
worker3: job3, job4 (17)
sum: 41