题意:给出n个工作,已知每个工作需要的时间last,以及截止时间end,(必须在截止时间之前完成)问最多能够完成多少个工作

首先预处理,将这n件任务按照截止时间从小到大排序

然后用一个cur记录当前做任务花费的时间, 如果发现当前cur>a[i].end,那么就将队列里面目前最大的last删除,把这个a[i].last加入队列

可以这样想,把更小的放进去,那么可以为后面的任务腾出更多的时间

然后每删除一次队列里面的元素(即不做这个任务),ans++, 最后能够完成的任务就是n-ans

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include <cmath>
 5 #include<stack>
 6 #include<vector>
 7 #include<map>
 8 #include<set>
 9 #include<queue>
10 #include<algorithm>
11 #define mod=1e9+7;
12 using namespace std;
13
14 typedef long long LL;
15 const int maxn=800005;
16
17 struct node{
18     int last,end;
19 } a[maxn];
20
21 int cmp(node n1,node n2){
22     return n1.end<n2.end;
23 }
24
25 int main(){
26     int t,n,i,j,cur,ans;
27     scanf("%d",&t);
28     while(t--){
29         scanf("%d",&n);
30         for(i=0;i<n;i++) scanf("%d %d",&a[i].last,&a[i].end);
31         sort(a,a+n,cmp);
32         priority_queue<int> pq;
33
34         cur=0;
35         ans=0;
36         for(i=0;i<n;i++){
37             cur+=a[i].last;
38             pq.push(a[i].last);
39             if(cur>a[i].end){
40                 cur-=pq.top();
41                 pq.pop();
42                 ans++;
43             }
44         }
45         printf("%d\n",n-ans);
46         if(t) printf("\n");
47     }
48     return 0;
49 }

View Code

话说还是看的题解= = 因为自己想成了今年暑假不AC那样的,求最大数量的不相交的题目 是这样转化的,用每一个end-last作为区间的左端点,end作为右端点来做 这样就转化成了求n个区间里面不相交的区间数量

可是 为什么它非得在end-last那一天开始做那件任务呢= =

只需要在截止的时间之前把任务做了就行啦,不一定非得恰好到截止时间才来做 所以这样想就不对啦= =

go---go---go--

转载于:https://www.cnblogs.com/wuyuewoniu/p/4370345.html

UVa 1153 Keep the Customer Satisfied 【贪心 优先队列】相关推荐

  1. uva 1153—— Keep the Customer Satisfied

    题意:有n个工作,已知每个工作的开始时间和结束时间,问最多能完成多少工作. 思路:贪心.要想使得最后的结果最佳,那么开始的晚的,要在最后来做.在此基础上,需要保证先做开始的早的(需要用优先队列来维护) ...

  2. UVa1153 Keep The Customer Satisfied(贪心)

    问题:有 n个订单,每个订单有两个属性,数量 q吨和交付时间d,其中每生产一吨铁需要1个单位时间.要求拒绝的订单数最少. 思路:对于两个订单(qa,da),(qb,db),如果qa>qb,da& ...

  3. POJ 2786 Keep the Customer Satisfied 贪心

    这题刚开始想成了背包的问题,,后来一直WA,,不知道为什么,然后想了一下这题使用背包时间复杂度也过不去,所以还是要用贪心 首先这里构建一个优先队列来存储当前决定要接受的订单中的轮子个数,对于最后期限从 ...

  4. HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解

    思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...

  5. 1163 最高的奖励(贪心+优先队列)

    有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该任务,就可以获得对应的奖励.完成每一个任务所需的时间都是1个单位时间.有时候完成所有任务是不可能的,因为时间上可能会有冲突 ...

  6. 贪心+优先队列 HDOJ 5360 Hiking

    题目传送门 1 /* 2 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 3 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小, ...

  7. 贪心(优先队列) - New Year Snowmen - CodeForces - 140C

    贪心(优先队列) - New Year Snowmen - CodeForces - 140C 题意: 给定一个长度为n的正整数序列a1,a2,...,an.给定一个长度为n的正整数序列a_1,a_2 ...

  8. CodeForces 140C New Year Snowmen (贪心+优先队列)

    题意:n个数,选三个严格下降的数为一组,求最多能选多少组,并列出每组哪些数. 题解:贪心+优先队列 最多能选多少组,那么必须贪心数量多的. 例如:1 1 2 3 4 5 如果按照数的大小排序,只能贪到 ...

  9. CF140C New Year Snowmen(贪心+优先队列)

    CF140C 贪心+优先队列 贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成 雪球数用优先队列维护 #include <bits/ ...

最新文章

  1. 团队作业——Alpha冲刺 6/12
  2. Vivado中两种RTL原理图的查看方法和区别
  3. 偏方使用不当担心被毁容! - 生活至上,美容至尚!
  4. 牛顿方法、指数分布族、广义线性模型—斯坦福ML公开课笔记4
  5. 两组的数据平均值合并_不要进入数据陷进
  6. Hibernate教程
  7. 解决CentOS 中部署JasperReport时出错的问题。错误:net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '宋体
  8. 读取速度500m/s和1000m/s的硬盘,装系统使用起来有区别吗?
  9. 如何复制百度文库上的东西
  10. java 行政区划 三级_Java学习-056-Jsoup爬虫获取中国所有的三级行政区划数据
  11. 星巴克中国虎年新春限定产品上市
  12. android融云的几种参数,Android 集成融云
  13. PCB板不同材质区别
  14. 机器翻译领域最重要的论文和学术文献目录清单(清华大学NLP组)
  15. rsync命令以及xsync封装
  16. 基于jwt的token验证、原理及流程
  17. QQ相册(html)实例详述----Div布局
  18. 图像傅里叶变换的幅度谱和相位谱的以及反变换
  19. 365天挑战LeetCode1000题——Day 103 400题 检查二进制字符串字段 最大子序列交替和 最低票价 K 站中转内最便宜的航班
  20. Matlab实现图像插值和降低图像灰度级

热门文章

  1. css旋转45度_css 渐变过渡2D
  2. Python笔记-方差分析之单因素方差分析
  3. Arduino文档阅读笔记-WeMos D1 ESP8266 WIFI开发板入门
  4. Qt调用face++的http接口,实现人脸对比
  5. Qt/C++工作笔记-对vector与QVector中erase操作的进一步认识(区别与联系)
  6. Qt工作笔记-QTreeWidgetItem中type的基本用法
  7. js导出的xlsx无法打开_vue将数据导出为excel文件就是如此简单
  8. php书签源码,OneNav简约PHP导航书签源码
  9. oracle数据库查看归档路径,centos7下查oracle归档及物理文件路径
  10. 中考英语听说计算机考试满分,北京2018中考英语听说计算机考试注意事项