leetcode_雇佣 K 名工人的最低成本(优先级队列,堆排序)
题干:
有 N 名工人。 第 i 名工人的工作质量为 quality[i] ,其最低期望工资为 wage[i] 。
现在我们想雇佣 K 名工人组成一个工资组。在雇佣 一组 K 名工人时,我们必须按照下述规则向他们支付工资:
对工资组中的每名工人,应当按其工作质量与同组其他工人的工作质量的比例来支付工资。
工资组中的每名工人至少应当得到他们的最低期望工资。
返回组成一个满足上述条件的工资组至少需要多少钱。
看完题干第一反应是个贪心题,先算出所有员工的性价比wage/quality,最后的结果必然是某个员工刚刚好拿到最低工资,其他员工按该员工的性价比比例分配;求出所有可能的值选取最小的方法通过剪枝也许可行…但基本还是使用主流的堆排序方法比较稳妥。
需要使用的优先级队列在头文件queue.h中调用,默认为一个大根堆。将工人按性价比升序排序后,其quality依次入队,队列大小满k后将性价比*总quality算出最终工资,与最小值比较后进行取值,最后将队列首部弹出(默认大根堆,弹出最大quality元素),再重复入队,弹出,最终得到最小应付工资。
这就是资本家?
贴代码:
class Solution {
public:
double mincostToHireWorkers(vector<int>& quality, vector<int>& wage, int K) {
int y=wage.size();
double result=;
vector<vector<double> > x(y,vector<double>());
for(int i=;i<y;i++){
x[i][]=(double)wage[i]/quality[i];
x[i][]=quality[i];
}
sort(x.begin(),x.end());
priority_queue<double> q;
int tmp=;
for(auto z:x){
q.push(z[]);
tmp+=z[];
if(q.size()==K){
result=min(tmp*z[], result);
tmp-=q.top();
q.pop();
}
}
return result;
}
};
值得注意的是leetcode的vector用作二维数组初始化方式,行列都要初始化(?)。在进行性价比的计算还需强制转换类型double,不然结果一直是整数。
leetcode_雇佣 K 名工人的最低成本(优先级队列,堆排序)的更多相关文章
- [Swift]LeetCode857. 雇佣 K 名工人的最低成本 | Minimum Cost to Hire K Workers
There are N workers. The i-th worker has a quality[i] and a minimum wage expectation wage[i]. Now w ...
- 贪心-谷歌-857. 雇佣 K 名工人的最低成本
2020-03-15 22:00:39 问题描述: 有 N 名工人. 第 i 名工人的工作质量为 quality[i] ,其最低期望工资为 wage[i] . 现在我们想雇佣 K 名工人组成一个工资组 ...
- [LeetCode] 857. Minimum Cost to Hire K Workers 雇佣K名工人的最低成本
There are N workers. The i-th worker has a quality[i] and a minimum wage expectation wage[i]. Now w ...
- 雇佣K个工人的最小费用 Minimum Cost to Hire K Workers
2018-10-06 20:17:30 问题描述: 问题求解: 问题规模是10000,已经基本说明是O(nlogn)复杂度的算法,这个复杂度最常见的就是排序算法了,本题确实是使用排序算法来进行进行求解 ...
- [Swift]LeetCode1000. 合并石头的最低成本 | Minimum Cost to Merge Stones
There are N piles of stones arranged in a row. The i-th pile has stones[i] stones. A move consists ...
- Leetcode1000 合并石头的最低成本 区间DP
有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头. 每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的总数. 找出把所有石头合并成一堆的最低成 ...
- PTA 畅通工程之最低成本建设问题(30 分)(最小生成树 krusal)
畅通工程之最低成本建设问题(30 分) 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出“畅通工程”的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路 ...
- 7-12 畅通工程之最低成本建设问题(30 point(s)) 【PRIME】
7-12 畅通工程之最低成本建设问题(30 point(s)) 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出"畅通工程"的目标:使整个地区任何两个城镇间 ...
- [LeetCode] 857. Minimum Cost to Hire K Workers 雇K个工人的最小花费
There are N workers. The i-th worker has a quality[i] and a minimum wage expectation wage[i]. Now w ...
随机推荐
- C++学习--编译优化
常量折叠 把常量表达式的值求出来作为常量嵌在最终生成的代码中. 疑问:对于一个很复杂的常量表达式,编译器会算出结果再编译吗?亦或者是把这个表达式完全翻译成机器码,最终留给程序去解决? 分情况: 涉及的 ...
- Python实现按键精灵(一)-键鼠操作
需要安装 pywin32库 pip install pywin32 import win32api import time #鼠标移动 def mouse_move(x,y): win32api.Se ...
- [GitHub] 75+的 C# 数据结构和算法实现
C#中标准数据结构和算法的即插即用类库项目 GitHub:https://github.com/aalhour/C-Sharp-Algorithms Watch: 307 Star: 3.4k For ...
- Acid靶机渗透
Acid渗透靶机实战 攻击机:kali 192.168.41.147 靶机: acid 192.168.41.149 信息收集 ip发现 开启Acid靶机,通过nmap进行局域网存火主机扫描. {//不为空,说明用户已经注册过 //将用户注册到 ...
- How to permit SSH root Login in Ubuntu 18.04
https://www.ubuntu18.com/ssh-permitrootlogin/ SSH root login is disabled by default in Ubuntu 18.04. ...
- java 中的fork join框架
文章目录 ForkJoinPool ForkJoinWorkerThread ForkJoinTask 在ForkJoinPool中提交Task java 中的fork join框架 fork joi ...
- HDU 1402 A*B
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define ms(s,a) memset(s,a ...
- 还在写CURD?试试这款基于mybatis-plus的springboot代码生成器
目录 ⚡Introduction ✔️Release Features Quick Start Examples 1.Controller模板代码示例 2.Service模板代码示例 3.Servic ...