博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj1029]建筑抢修<贪心>
阅读量:7212 次
发布时间:2019-06-29

本文共 1443 字,大约阅读时间需要 4 分钟。

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1029

解析:这也算bzoj中比较简单的一道题,其实想通了就是非常的简单。

   这题用贪心的方式,我们先按照结束时间从小到大排,然后记录当前花费时间,只要可以继续修理就修理,如果不能修理(修理时间大于结束时间),就判断之前的操作中耗时最大的修理是不是比现在的修理时间更久,如果久,就放弃之前的那次修理,转而选择现在的这次修理(这个地方要好好想想,因为是按照结束时间的大小来从小到大执行的,是符合最终答案的)

       然后我们通过样例来说明一下这个过程。

样例:                                                按照结束时间排序后的样例:

100 200                                                                                         100 200                                                                                                                  

200 1300                                                                                       1000 1250                                                                                                           

1000 1250                                                                                     200 1300                                                                                                                     

2000 3200                                                                                     2000 3200

首先修第一个,耗时100,不大于结束时间200;

判断第二个,单个耗时1000,总耗时1100,不大于结束时间1250,加入第二个;

判断第三个,单个耗时200,总耗时1300,不大于结束时间1300,加入第三个;

判断第四个,单个耗时2000,总耗时3300,大于结束时间3200,且单个耗时2000大于之前最大耗时1000,不加入第四个;

所以最后维修3个;

但是这是测试样例,可以看出组合方式有几种都可以满足3种,有一句话说的好,测试数据是万能的,所以还是建议自己亲自去举个例子来看

 

然后就是代码:

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #define maxn 150005 9 using namespace std;10 11 struct node{12 int t1,t2;13 }t[maxn];14 15 int n,m,ans,tot;16 int maxt;17 18 int comp(void const*a,void const*b)19 {20 return(*(struct node*)a).t2>(*(struct node*)b).t2?1:-1;21 }22 23 priority_queue
q;24 25 int main()26 {27 scanf("%d",&n);28 for(int i=1;i<=n;i++)29 {30 int a,b;31 scanf("%d%d",&a,&b);32 t[i].t1=a;t[i].t2=b;33 }34 qsort(t,n+1,sizeof(t[0]),comp);35 for(int i=1;i<=n;i++)36 {37 if(ans+t[i].t1<=t[i].t2)38 {39 q.push(t[i].t1);40 ans+=t[i].t1;tot++;41 }else{42 if(t[i].t1
View Code

 

 

                                                                                                              

转载于:https://www.cnblogs.com/Danzel-Aria233/p/7382224.html

你可能感兴趣的文章
实战:通过组策略为用户部署软件
查看>>
Fedora 17 安装视频
查看>>
基于zeromq的高性能分布式RPC框架Zerorpc 性能测试
查看>>
IL系列文章之二:Make Best Use of Our Tools
查看>>
Apache Ant使用过程的总结
查看>>
ES 相似度算法设置(续)
查看>>
oc73--NSArray使用
查看>>
Backbone.js入门学习资源
查看>>
类型转化:float -> DWORD
查看>>
Android自定义视图二:如何绘制内容
查看>>
Python天天美味(21) - httplib,smtplib
查看>>
第 37 章 ACOS - CLI
查看>>
Lock-Free 编程
查看>>
7.3. 查看命令
查看>>
解决Wamp 开启vhost localhost 提示 403 Forbbiden 的问题!
查看>>
[WinAPI] API 14 [获取、设置文件属性和时间]
查看>>
AutoCompleteTextView 和 TextWatcher 详解
查看>>
2.5. SciTE
查看>>
喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)
查看>>
【转载】Java 内存分配全面浅析
查看>>