欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Leetcode 857 -- 贪心 | 数学

Leetcode 857 -- 贪心 | 数学

2025/4/4 13:13:33 来源:https://blog.csdn.net/Sti1lWater/article/details/146987104  浏览:    关键词:Leetcode 857 -- 贪心 | 数学

题目描述

雇佣 K 名工人的最低成本

思路

参考官方题解和这里。

代码1(正确)

class Solution {
public:double mincostToHireWorkers(vector<int>& quality, vector<int>& wage, int k) {int n = wage.size();double res = 0, totalq = 0; // totalqualityvector<int> h(n);for(int i = 0; i < n; i ++ )    h[i] = i;sort(h.begin(), h.end(), [&](int &a, int &b){return wage[a] * quality[b] < wage[b] * quality[a]; });for(int i = 0; i < n; i ++ )    cout << h[i] << ' ';cout << endl;priority_queue<int, vector<int>, less<int>> q; // 降序for(int i = 0; i < k - 1; i ++ ){q.push(quality[h[i]]);totalq += quality[h[i]];}for(int i = k - 1; i < n; i ++ ){q.push(quality[h[i]]);totalq += quality[h[i]];double cur = totalq / (double)quality[h[i]] * wage[h[i]];if(res == 0 || cur < res)  res = cur;totalq -= q.top();q.pop();}return res;}
};

代码2(错误)

class Solution {
public:typedef pair<double, int> PDI;double mincostToHireWorkers(vector<int>& quality, vector<int>& wage, int k) {int n = wage.size();double res = 0, totalq = 0; // totalqualityvector<int> h(n);for(int i = 0; i < n; i ++ )    h[i] = i;sort(h.begin(), h.end(), [&](int &a, int &b){return quality[a] < quality[b];});priority_queue<PDI, vector<PDI>, less<PDI>> q; // 降序for(int i = 0; i < k - 1; i ++ ){int idx = h[i];totalq += quality[idx];q.push({(double)wage[i] / quality[i],idx});}for(int i = k - 1; i < n; i ++ ){int idx = h[i];q.push({(double)wage[idx] / quality[idx],idx});          totalq += quality[idx];auto t = q.top();cout << totalq << ' ';double cur = totalq * t.first;if(res == 0 || cur < res)   res = cur;totalq -= quality[t.second];q.pop();}return res;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词