牛牛港

题解

tag:排序+堆
首先因为物资先到先装载,于是我们先根据到达时间从小到大排个序。
我们考虑我们能怎么样合理规划码头的使用?
因为任务完成是有顺序的,所以我们可以贪心地选择空闲了最久的码头使用。
于是我们就要贪心的维护每个码头的使用情况
于是我们考虑用一个最小堆来维护,每次将空闲最久的码头弹出来,然后再计算这个码头下次空闲时间,再将这个时间加入堆中。
我们即可贪心地维护这样一个过程,开始地时候将k个0先放入堆中,代表初始k个码头
时间复杂度

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @param k int整型 
     * @param a int整型vector 
     * @param b int整型vector 
     * @return long长整型
     */
    priority_queue<long long , vector<long long >,greater<long long > >q;
    struct Node{
        long long x,y;
        bool friend operator < (Node a, Node b)
        {
            return a.x<b.x;
        }
    }A[100005];
    long long solve(int n, int k, vector<int>& a, vector<int>& b) {
        // write code here
        for (int i=0; i<n; i++) A[i].x=a[i],A[i].y=b[i];
        sort(A,A+n);
        for(int i=1;i<=k;i++)
            q.push(0);
        // x,y;
        long long ans=0;
        for(int i=0;i<n;i++)
        {
            //scanf("%lld%lld",&x,&y);
            long long tmp=max(A[i].x,q.top())+A[i].y;
           // printf("%lld\n",x);

            ans=max(ans,tmp);
            q.pop();
            q.push(tmp);
        }
           return ans;
    }
};
全部评论

相关推荐

流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务