牛牛港
题解
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;
}
};
查看22道真题和解析