本文共 563 字,大约阅读时间需要 1 分钟。
有n个东西,东西必须在 a i s a_i\ s ai s前破坏,破坏后可以获得 w i w_i wi价值,求最大价值。
我们可以将时间从大到小排序,然后用堆,每次处理价值最大的就好了。
#include#include #include #define ll long long#define N 200100using namespace std;struct node{ ll t,w;}a[N];ll n,last,ans;priority_queue 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
转载地址:http://mxzaf.baihongyu.com/