【uva 1153】Keep the Customer Satisfied(算法效率–贪心+优先队列)

【uva 1153】Keep the Customer Satisfied(算法效率–贪心+优先队列)

大家好,又见面了,我是全栈君。

题意:有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 }

 

转载于:https://www.cnblogs.com/konjak/p/6055552.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108787.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PL/SQL 学习-NVL函数[通俗易懂]

    PL/SQL 学习-NVL函数[通俗易懂]Oracle :NvlNVL函数:NVL函数是将NULL值的字段转换成默认字段输出。NVL(expr1,expr2)expr1,需要转换的字段名或者表达式。expr2,null的替代值下面是NUMBER,DATE,CHARORVARCHAR2的例子:NVL(commission_pct,0)NVL(hire_date,’01-JAN-97′)N

    2022年7月15日
    20
  • intellij idea快捷键大全_idea中快捷键

    intellij idea快捷键大全_idea中快捷键最常用代码结构优化Ctrl+Alt+L:格式化代码Ctrl+Alt+I:将选中的代码进行自动缩进编排,这个功能在编辑JSP文件时也可以工作Ctrl+Alt+O:优化导入的类和包(去掉无用的import语句)Ctrl+/或Ctrl+Shift+/:注释(//或者/**/)Ctrl+Shift+J:两行合成一行,删去不必要的空格匹配代码格式跳转定位Ctrl+Alt+B:跳转到方…

    2022年10月9日
    4
  • 《linux 内核全然剖析》 chapter 2 微型计算机组成结构

    《linux 内核全然剖析》 chapter 2 微型计算机组成结构

    2021年11月16日
    45
  • 03_Hadoop架构

    03_Hadoop架构

    2021年8月22日
    57
  • 四大审计费收费标准_四大 税务咨询收费

    四大审计费收费标准_四大 税务咨询收费“7年的心血和积累,说关就要关,说停就要停。没有人会甘心,但也早料到这一刻会突然到来。现在所能做的,唯有面对现实,准备好勇气,即使全部推倒从头再来,我们也绝不放弃。”1月22日,国内著名资源分享网站VeryCD的创始人黄一孟的这样一条微博牵动了不少用户的神经。用户们发现,VeryCD网站上的音乐频道已经悄然关闭,电影和电视剧频道也不再提供下载链接。坊间则风传VeryCD未取得广电总局的视听服务许

    2022年8月10日
    17
  • Web开发 Cs和Bs架构

    Web开发 Cs和Bs架构CS架构:是指客户端与服务器举个例子:qq.exe文件在电脑上安装就可以看做是一个客户端,而数据就是从服务器发送过来的,优点在于,安全性能相对而言较高,缺点在于,对于不同的操作系统需要开发出不同版本的软件BS架构:是指游览器与服务器比如说qq.com可以在浏览器中直接访问优点在于,具有可移植性缺点在于,安全性能相对较低,以及与电脑自身的网速有关…

    2025年10月10日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号