【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)
上一篇 2022年2月22日 下午2:00
下一篇 2022年2月22日 下午2:00


相关推荐

  • 怎样用python开发安卓app_python需要的软件

    怎样用python开发安卓app_python需要的软件我很早之前就想开发一款app玩玩,无奈对java不够熟悉,之前也没有开发app的经验,因此一直耽搁了。最近想到尝试用python开发一款app,google搜索了一番后,发现确实有路可寻,目前也有了一些相对成熟的模块,于是便开始了动手实战,过程中发现这其中有很多坑,好在最终依靠google解决了,因此小记一番。说在前面的话python语言虽然很万能,但用它来开发app还是显得有点不对路,因此用py…

    2022年8月12日
    9
  • idea插件activate-power-mode-x

    idea插件activate-power-mode-xactivate-power-mode-x一、介绍可以写代码的时候有特效二、安装-安装完成后重启idea三、设置刚开始时右上角会有个计数器,每次到达到多少个单词后才会有效果触发,还有抖动效果可以根据自己的喜好进行设置(去掉shake没有抖动效果,去掉combo没有计数器)…

    2022年7月14日
    40
  • 正则表达式:匹配不包含某些字符和不包含某些字符串的写法「建议收藏」

    正则表达式:匹配不包含某些字符和不包含某些字符串的写法「建议收藏」不包含某些字符:不包含某些字符串:当然下面不包含字符串可以演变为不包含字符使用,看你喜欢使用。

    2022年7月2日
    33
  • oracle sequence用法_oracle赋值

    oracle sequence用法_oracle赋值创建sequence:createsequenceseq_testincrementby1startwith1noMaxValuenoCyclecache10;createsequenceseq_test2minvalue1maxvalue21startwith1incrementby1cache20cycleorder;minValue:指定序列最小值。maxV…

    2022年10月19日
    6
  • 执行top命令(linux命令详解之df命令)

    首先介绍top中一些字段的含义:VIRT:virtualmemoryusage虚拟内存1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:residentmemoryusage常驻内存1、进程当前使用的内存大小,但不包括swapout2、包含其他进程的共享3、如果申请100…

    2022年4月11日
    123
  • ASP Web网站课程设计指南

    ASP Web网站课程设计指南本文旨在帮助大家快速完成 ASPWeb 网站课程设计 nbsp 0 nbsp 找源代码 nbsp 关键词 ASP nbsp Access nbsp 电子商务网站 nbsp 千万别搜错 nbsp nbsp ASP nbsp 不是 ASP Net nbsp nbsp nbsp nbsp 可以在 CSDN 源码之家 nbsp A5 源码网站搜索 nbsp 推荐 CSDN nbsp 一搜一大把 nbsp nbsp 还有要注意电脑 Access 版本 nbsp 2003 和 2007 两个版本连接字符串不一样 1 进入 xp 系统 nbsp 将代码放入 C inet

    2026年3月18日
    2

发表回复

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

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