美文网首页
骨骼清奇Optimization

骨骼清奇Optimization

作者: SharlotteZZZ | 来源:发表于2018-10-17 05:32 被阅读0次

    Catalog:
    LC 857 Minimum Cost to Hire K Workers

    LC 857 Minimum Cost to Hire K Workers
    Our final pay out will be group ratio(wage/quality)*total quality. To minimize the total wage, we want a small ratio and small total quality. Note that the group ratio will be the max one of the expected ratio of the group.
    To start with, we sort all workers with their expected ratio, and pick up K first worker. This is minimum group ratio, but the total quality associated with it may not be small enough to give us the answer. We move and pick up next worker with bigger ratio, now we have a bigger group ratio, and we will kick out one person to match group size requirement - we will remove the worker with highest quality so that we still keep K workers but now the total quality is smaller. If we happen to kick out the one we just added, that's fine, we will not update the answer as the calculated cost is greater with higher ratio while same total quality.

    For every ratio, we find the minimum possible total quality of K workers.

    class Solution(object):
        def mincostToHireWorkers(self, quality, wage, K):
            from fractions import Fraction
            workers = sorted((Fraction(w, q), q, w)
                             for q, w in zip(quality, wage))
    
            ans = float('inf')
            pool = []
            sumq = 0
            for ratio, q, w in workers:
                heapq.heappush(pool, -q)
                sumq += q
    
                if len(pool) > K:
                    sumq += heapq.heappop(pool)
    
                if len(pool) == K:
                    ans = min(ans, ratio * sumq)
    
            return float(ans)
    

    相关文章

      网友评论

          本文标题:骨骼清奇Optimization

          本文链接:https://www.haomeiwen.com/subject/nakczftx.html