# 826. Most Profit Assigning Work 安排工作以达到最大收益

## # 题目描述：

We have jobs: `difficulty[i]` is the difficulty of the `i`th job, and `profit[i]` is the profit of the ith job.

Now we have some workers. `worker[i]` is the ability of the `i`th worker, which means that this worker can only complete a job with difficulty at most `worker[i]`.

Every worker can be assigned at most one job, but one job can be completed multiple times.

For example, if 3 people attempt the same job that pays \$1, then the total profit will be \$3. If a worker cannot complete any job, his profit is \$0.

What is the most profit we can make?

Example 1:

``````Input: difficulty = [2,4,6,8,10], profit = [10,20,30,40,50], worker = [4,5,6,7]
Output: 100
Explanation: Workers are assigned jobs of difficulty [4,4,6,6] and they get profit of [20,20,30,30] seperately.
``````

Notes:

1. `1 <= difficulty.length = profit.length <= 10000`
2. `1 <= worker.length <= 10000`
3. `difficulty[i], profit[i], worker[i]` are in range `[1, 10^5]`

## # 解题方法

``````class Solution(object):
def maxProfitAssignment(self, difficulty, profit, worker):
"""
:type difficulty: List[int]
:type profit: List[int]
:type worker: List[int]
:rtype: int
"""
jobs = sorted([a, b] for a, b in zip(difficulty, profit))
curMax, i = 0, 0
res = 0
for w in sorted(worker):
while i < len(jobs) and w >= jobs[i][0]:
curMax = max(curMax, jobs[i][1])
i += 1
res += curMax
return res
``````

https://leetcode.com/problems/most-profit-assigning-work/discuss/127031/C++JavaPython-Sort-and-Two-pointer

## # 日期

2018 年 10 月 17 日 —— 今又重阳，战地黄花分外香