骨骼清奇Optimization

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)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容