用 Python 编写程序,找出雇用 k 名工人的最低成本
假设我们为每位不同的工人设置了一个名为 quality 的数组,还有另一个名为 wages 的数组,其值为 K。第 i 位工人的 quality[i] 和最低工资预期 wage[i]。我们想雇用 K 名工人组成一个有偿团队。当我们雇佣一组 K 名工人时,我们必须按照以下规则支付他们工资:
与该组中的其他工人相比,该组中的每位工人都应按照其质量比率获得报酬。
该组中的每位工人必须至少获得其最低工资期望。
我们必须找到组建满足上述条件的付费组所需的最少金额。
因此,如果输入为 quality = [10,22,5]、wage = [70,52,30] 和 K = 2,则输出将为 105.000,因为我们将向第一位工人支付 70,向第三位工人支付 35。
为了解决这个问题,我们将遵循以下步骤 −
qr := a new列表
对于 quality 和 wage 中的每个对 (q, w),执行
在 qr 末尾插入 (w/q, q)
对列表 qr 进行排序
cand := 一个新列表,csum := 0
对于范围从 0 到 K - 1 的 i,执行
将 -qr[i, 1] 插入堆 cand
csum := csum + qr[i, 1]
ans := csum * qr[K - 1, 0]
对于idx 在范围 K 到质量大小之间,执行
将 -qr[i, 1] 插入堆 cand
csum := csum + qr[idx, 1] + 堆 cand 的顶部元素并将其从堆中删除
ans = ans 和 (csum * qr[idx][0]) 的最小值
返回 ans
示例
让我们看看下面的实现以便更好地理解
import heapq
def solve(quality, wage, K):
qr = []
for q, w in zip(quality, wage):
qr.append([w/q, q])
qr.sort()
cand, csum = [], 0
for i in range(K):
heapq.heappush(cand, -qr[i][1])
csum += qr[i][1]
ans = csum * qr[K - 1][0]
for idx in range(K, len(quality)):
heapq.heappush(cand, -qr[idx][1])
csum += qr[idx][1] + heapq.heappop(cand)
ans = min(ans, csum * qr[idx][0])
return ans
quality = [10,22,5]
wage = [70,52,30]
K = 2
print(solve(quality, wage, K))
输入
[10,22,5], [70,52,30], 2
输出
105
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

