题意:有N个工作,已知每个工作需要的时间和截止时间。要求所有工作穿行完成,第一项任务开始的时间不早于时刻0。问最多能完成多少个工作。(N≤800000)

解法:贪心。可以模型化题目为:已知N个任务的长度和右端点的限制位置,问最多能完成的任务的个数。——也就是每一步在一定条件下要使得数目尽量大,以及时间尽量短(最优)。
   于是可以按截止时间(这就是条件●_●)从小到大排序,先考虑截止时间早的,暂时放入选择的队列中,加入其时间。接着对于当前新的工作,若按当前选择的工作的情况无法在截止时间之前完成这个工作,分2种情况讨论:(1)当前工作需要的时间比选择的队列中工作时间最长的还要长,就放弃这个工作,使完成相同数目工作的耗时尽量小;(2)工作时间比队列中时间最长的要短,就删去队列中时间最长的任务并且将当前的工作加入队列。--“最优子结构”  这样O(n)扫一次,加上使用优先队列,时间复杂度就是O(n log n)。

P.S.不能不判断就选了第一个......

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 #include<iostream>
6 #include<queue>
7 #include<vector>
8 using namespace std;
9
10 const int N=(int)8e5+10;
11 int n;
12 struct node{int d,t;}a[N];
13 priority_queue<int> q;
14
15 bool cmp(node x,node y) {return x.t<y.t;}
16 int main()
17 {
18 int T;
19 scanf("%d",&T);
20 while (T--)
21 {
22 scanf("%d",&n);
23 for (int i=1;i<=n;i++)
24 scanf("%d%d",&a[i].d,&a[i].t);
25 sort(a+1,a+1+n,cmp);
26 while (!q.empty()) q.pop();
27 int sum=0,cnt=0;
28 for (int i=1;i<=n;i++)
29 {
30 if (sum+a[i].d<=a[i].t)
31 {
32 q.push(a[i].d);
33 sum+=a[i].d, cnt++;
34 }
35 else
36 {
37 if (q.empty()) continue;//
38 int x=q.top();
39 if (a[i].d<x)
40 {
41 sum=sum-x+a[i].d;
42 q.pop(),q.push(a[i].d);
43 }
44 }
45 }
46 printf("%d\n",cnt);
47 if (T) printf("\n");
48 }
49 return 0;
50 }

【uva 1153】Keep the Customer Satisfied(算法效率--贪心+优先队列)的更多相关文章

  1. UVA - 1153 Keep the Customer Satisfied(贪心)

    UVA - 1153 Keep the Customer Satisfied Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: ...

  2. UVa 1153 Keep the Customer Satisfied 【贪心 优先队列】

    题意:给出n个工作,已知每个工作需要的时间last,以及截止时间end,(必须在截止时间之前完成)问最多能够完成多少个工作 首先预处理,将这n件任务按照截止时间从小到大排序 然后用一个cur记录当前做 ...

  3. UVA 1153 KEEP THE CUSTOMER SATISFIED

    题意: 钢铁公司有N个客户的订单,每个订单有一个产量q(生产时间刚好也等于q)和订单完成截止时间.公司要求完成尽量多的订单. 分析: 先按截止时间d排序,然后维护一个已经选好的订单的优先队列,如果当前 ...

  4. UVa 1153 Keep the Customer Satisfied (贪心+优先队列)

    题意:给定 n 个工作,已知每个工作要用的时间 q 和 截止时间 d,问你最多完成多少个工作,每次最多能运行一个工作. 析:这个题是贪心,应该能看出来,关键是贪心策略是什么,这样想,先按截止时间排序, ...

  5. UVA 1153 Keep the Customer Satisfied 顾客是上帝(贪心)

    因为每增加一个订单,时间是会增加的,所以先按截止时间d排序, 这样的话无论是删除一个订单,或者增加订单,都不会影响已经选好的订单. 然后维护一个已经选好的订单的大根堆(优先队列),如果当前无法选择的话 ...

  6. UVA - 1153 Keep the Customer Satisfied(顾客是上帝)(贪心)

    题意:有n(n<=800000)个工作,已知每个工作需要的时间qi和截止时间di(必须在此之前完成),最多能完成多少个工作?工作只能串行完成.第一项任务开始的时间不早于时刻0. 分析:按截止时间 ...

  7. 【uva 1617】Laptop(算法效率--贪心,2种理解)

    题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且"空隙"数目最小.输出"空隙"数.(1≤N≤100000) 解法:(P.S.我这题竟做了2个多小时, ...

  8. 【uva 1615】Highway(算法效率--贪心 区间选点问题)

    题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到 ...

  9. 【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)

    题意:给出n个区间[a,b),有2个记录器,每个记录器中存放的区间不能重叠.求2个记录器中最多可放多少个区间. 解法:贪心.只有1个记录器的做法详见--关于贪心算法的经典问题(算法效率 or 动态规划 ...

随机推荐

  1. 浅谈Go中的time.After

    go的一条哲学是 不要通过共享来实现通信,而是通信来实现共享 多协程之间通过 channel 来实现通信,而普遍会遇到的问题是,如何进行超时控制,资料一查询,需要配置select和time.After ...

  2. 改进你的c#代码的5个技巧(四)

    像每一篇文章一样,我会重复几行.我在我的Core i3 CPU.4GB主内存和Windows 7平台上测试了以下代码.如果你在不同的硬件配置或使用不同的平台,那么你的输出可能会随着我的输出屏幕而变化, ...

  3. 【IMP】IMP导入表的时候,如果表存在怎么办

    在imp导入的时候,如果表存在的话,会追加数据在表中, 所以如果不想追加在表中的话,需要将想导入的表truncate掉后,在imp SQL: truncate table TEST1; imp tes ...

  4. SEO大杀器rendertron安装

    前段时间做SEO的优化,使用的是GoogleChrome/rendertron,发现这个安装部署的时候还是会有一些要注意的地方,做个记录 为什么要使用rendertron 目前很多网站都是使用 vue ...

  5. Java中的深浅拷贝问题,你清楚吗?

    一.前言 拷贝这个词想必大家都很熟悉,在工作中经常需要拷贝一份文件作为副本.拷贝的好处也很明显,相较于新建来说,可以节省很大的工作量.在Java中,同样存在拷贝这个概念,拷贝的意义也是可以节省创建对象 ...

  6. python中json模块的使用

    Python自带json模块,它有loads.dumps.load和dump这4个功能,用于Json格式字符串和Python数据类型间进行转换. 一.json.loads() 把Json格式字符串解码 ...

  7. 【UNIAPP】接入导航系统完整版

    // 查询附近/搜索关键词 <template> <view> <!--地图容器--> <map id="myMap" :markers= ...

  8. 小白都看得懂的Javadoc使用教程

    Javadoc是什么 官方回答: Javadoc is a tool for generating API documentation in HTML format from doc comments ...

  9. C指针的这些使用技巧,掌握后立刻提升一个Level

    这是道哥的第016篇原创 关注+星标公众号,不错过最新文章 目录 一.前言 二.八个示例 1. 开胃菜:修改主调函数中的数据 2. 在被调用函数中,分配系统资源 2.1 错误用法 2.2 正确用法 3 ...

  10. libco hook原理简析

    我们先看一下libco协程库的特性描述 libco的特性 无需侵入业务逻辑,把多进程.多线程服务改造成协程服务,并发能力得到百倍提升; 支持CGI框架,轻松构建web服务(New); 支持gethos ...