牛牛港
题解
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; } };