1. 程式人生 > 其它 >【ybt】【資料結構 二分堆 課過 例4】工作安排

【ybt】【資料結構 二分堆 課過 例4】工作安排

工作安排

題目連結:工作安排


題目描述

在這裡插入圖片描述

解題思路

我們先以時間為第一關鍵字、利潤為第二關鍵字排序,然後貪心,在當前時間內選最大的利潤。

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; }