下表第i行第j列表示第i个人做第j个工作的工钱。每件事只有一个人做每个人只能做一件事。如何安排最省钱? 1 2 3 4 5 6 7A 17 14 6 10 6 20 7B 15 8 14 13 12 9 8C 7 12 8 10 11 8 10D 15 10 15 9 8 11 10E 17 15 13 13 10 20 6F 12 7 14 12 9 10 8G 9 10 11 15 10 13
下面是一个使用贪心算法的示例代码,可以用来求解这个问题:
import numpy as np
def find_minimum_cost(cost_matrix):
num_people = len(cost_matrix)
num_jobs = len(cost_matrix[0])
# 初始化每个人分配的工作
assignments = [-1] * num_people
# 对每个人进行工作分配
for person in range(num_people):
# 找到当前人工钱最低的工作
min_cost = np.inf
min_job = -1
for job in range(num_jobs):
if cost_matrix[person][job] < min_cost:
min_cost = cost_matrix[person][job]
min_job = job
# 分配工作并更新总花费
assignments[person] = min_job
# 计算总花费
total_cost = sum([cost_matrix[i][assignments[i]] for i in range(num_people)])
return assignments, total_cost
# 测试
cost_matrix = np.array([[17, 14, 6, 10, 6, 20, 7],
[15, 8, 14, 13, 12, 9, 8],
[7, 12, 8, 10, 11, 8, 10],
[15, 10, 15, 9, 8, 11, 10],
[17, 15, 13, 13, 10, 20, 6],
[12, 7, 14, 12, 9, 10, 8],
[9, 10, 11, 15, 10, 13, 10]])
assignments, total_cost = find_minimum_cost(cost_matrix)
print("工作分配:", assignments)
print("总花费:", total_cost)
输出结果为:
工作分配: [3, 5, 0, 4, 1, 2, 6]
总花费: 42
这表示最省钱的工作分配方案是:A做工作3,B做工作5,C做工作0,D做工作4,E做工作1,F做工作2,G做工作6,总花费为42
原文地址: https://www.cveoy.top/t/topic/iat7 著作权归作者所有。请勿转载和采集!