码迷,mamicode.com
首页 > 其他好文 > 详细

[bzoj1572]工作安排

时间:2019-11-13 15:57:21      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:one   img   display   color   top   click   i++   需要   closed   

按照Di排序,从小到大枚举物品,考虑如果直接能选就选上,不能选就考虑替换之前价值最小的来选(显然一定是可行的,只需要在原来选价值最小的时候选这个就行了),这个东西用堆来维护即可

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct ji{
 4     int d,p;
 5 }a[100005];
 6 priority_queue<int>q;
 7 int n,m,x,y,s;
 8 long long ans;
 9 bool cmp(ji x,ji y){
10     return x.d<y.d;
11 }
12 int main(){
13     scanf("%d",&n);
14     for(int i=1;i<=n;i++){
15         scanf("%d%d",&x,&y);
16         if (x>n)ans+=y;
17         else a[++m]=ji{x,y};
18     }
19     sort(a+1,a+m+1,cmp);
20     for(int i=1;i<=m;i++)
21         if (a[i].d>s){
22             s++;
23             ans+=a[i].p;
24             q.push(-a[i].p);
25         }
26         else{
27             if (a[i].p<-q.top())continue;
28             ans+=a[i].p+q.top();
29             q.pop();
30             q.push(-a[i].p);
31         }
32     printf("%lld",ans);
33 }
View Code

 

[bzoj1572]工作安排

标签:one   img   display   color   top   click   i++   需要   closed   

原文地址:https://www.cnblogs.com/PYWBKTDA/p/11849950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!