Most Profit Assigning Work
We have jobs: difficulty[i] is the difficulty of the ith job, and profit[i] is the profit of the ith job.
Now we have some workers. worker[i] is the ability of the ith 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,thenthetotalprofitwillbe 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 <= difficulty.length = profit.length <= 10000
- 1 <= worker.length <= 10000
- difficulty[i], profit[i], worker[i] are in range [1, 10^5]
Solution 1
// by JOHNKRAM
class Solution {
public:
int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker) {
int a[100005],n=difficulty.size(),m=worker.size(),ans=0,i;
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
a[difficulty[i]]=max(a[difficulty[i]],profit[i]); // 每种难度只保留最大利润值
for(i=1;i<=100000;i++)
a[i]=max(a[i],a[i-1]); // 若低难度有更大利润,则更新高难度的利润
for(i=0;i<m;i++)
ans+=a[worker[i]]; // 求和即得结果
return ans;
}
};

本文介绍了一种算法,用于解决如何将不同难度的工作最优地分配给具备不同能力的工人,以达到最大化的总收益。该算法通过预处理难度与利润的关系,并采用动态规划思想来高效求解。
559

被折叠的 条评论
为什么被折叠?



