【ybt】【資料結構 二分堆 課過 例4】工作安排
阿新 • • 發佈:2021-05-06
工作安排
題目描述
解題思路
我們先以時間為第一關鍵字、利潤為第二關鍵字排序,然後貪心,在當前時間內選最大的利潤。
code
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<queue>
#define int long long
using namespace std;
priority_queue<int> q;
int n,m;
int ans;
struct abc{
int d,p;
}a[100010];
bool cmp (abc a,abc b)
{
if(a.d!=b.d)
return a.d<b.d;
return a.p>b.p;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%lld%lld",&a[i].d,&a[i].p),ans+=a[i].p;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
q.push(-a[i].p);
m++;
if(m>a[i].d)
{
ans+ =q.top();
q.pop();
m--;
}
}
cout<<ans<<endl;
}