1. 程式人生 > >nssl1269-射擊【貪心,堆】

nssl1269-射擊【貪心,堆】

正題


題目大意

有n個東西,東西必須在 a i   s a_i\ s 前破壞,破壞後可以獲得 w

i w_i 價值,求最大價值。


解題思路

我們可以將時間從大到小排序,然後用堆,每次處理價值最大的就好了。


code

#include<cstdio>
#include<queue>
#include<algorithm>
#define ll long long
#define N 200100
using namespace std;
struct node{
	ll t,
w; }a[N]; ll n,last,ans; priority_queue<ll> q; bool cmp(node x,node y)//排序 {return x.t==y.t?x.w>y.w:x.t>y.t;} int main() { scanf("%lld",&n); for(ll i=1;i<=n;i++) scanf("%lld%lld",&a[i].t,&a[i].w); sort(a+1,a+1+n,cmp); for(ll i=1;i<=n;i++) { if(a[i].w<0) continue
; q.push(a[i].w); for(ll j=a[i+1].t;j<a[i].t&&!q.empty();j++) { ans+=q.top(); q.pop(); } } printf("%lld",ans); }