2021-07-08 华为2022批笔试

华为2022批笔试

三道题

总结:写的时候太紧张了,很烦

T1

题目:给出n个任务的最晚完成时间(单位为小时)和对应积分,每小时只能做一个任务,且超时后不获得积分,求出最大的价值和。

解法:排序+堆
先对数组排序,先对最晚完成时间升序排序,再对积分降序排序。
用小根堆存储已经完成的任务的积分,遍历所有任务,当该任务未超时时加入堆,如果超时,比较两个任务的积分,将积分更多的任务加入堆,并且pop。
最后堆里面的就是能拿到积分的任务。

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

int main() {
   
    int n;
    cin >> n;
    vector<pair<ll, ll>> v;
    for (int i = 0; i < n; ++i) {
   
        int t1, t2;
        cin >> t1 >> t2;
        v.push_back({
    t1, t2 });
    }

    sort(v.begin(), v.end(), [&](const auto& lhs, const auto& rhs) {
   
        return lhs.first != rhs.first ? lhs.first < rhs.first : lhs.second > rhs.second;
    });

    priority_queue<ll, vector<ll>, greater<ll>> pq;
    for (const auto& i : v) {
   
        if (i.first > pq.size()) pq.
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值