题目链接: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种,有一句话说的好,测试数据是万能的,所以还是建议自己亲自去举个例子来看

然后就是代码:

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstdlib>
#include<cmath>
#define maxn 150005
using namespace std; struct node{
int t1,t2;
}t[maxn]; int n,m,ans,tot;
int maxt; int comp(void const*a,void const*b)
{
return(*(struct node*)a).t2>(*(struct node*)b).t2?:-;
} priority_queue<int>q; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
t[i].t1=a;t[i].t2=b;
}
qsort(t,n+,sizeof(t[]),comp);
for(int i=;i<=n;i++)
{
if(ans+t[i].t1<=t[i].t2)
{
q.push(t[i].t1);
ans+=t[i].t1;tot++;
}else{
if(t[i].t1<q.top())
{
ans-=q.top();
ans+=t[i].t1;
q.pop();
q.push(t[i].t1);
} } }
printf("%d",tot); }

最新文章

  1. ubuntu下gedit闪退,遇到问题:ERROR:../../gi/pygi-argument.c:1583:_pygi_argument_to_object: code should not be reached 已放弃 (核心已转储)
  2. 移动端调试工具-Debuggap
  3. linux修改系统时间和linux查看时区、修改时区的方法
  4. Bootstrap部分---环境安装及一个可视化的布局;
  5. NOJ1019-计算二叉树的高度和结点数
  6. Oracle- 日期加减
  7. android webview js交互 第一节 (java和js交互)
  8. codeforces 369 div2 C dp
  9. [LeetCode] Detect Capital 检测大写格式
  10. http协议状态码解析
  11. python网络编程 双人多人聊天
  12. [Maven]Maven如何得到单独的单元测试报告
  13. pdf文件去掉广告,水印,背景和删除密码方法收藏
  14. hadoop安装hbase
  15. Android 时间与日期操作类
  16. .net 打包下载
  17. Mininet的介绍&amp;安装
  18. 基于Elasticsearch 5.4.3的商品搜索系统
  19. yii2csrf攻击
  20. android 自动拨打电话 挂断电话代码

热门文章

  1. 从零开始打造 Mock 平台 - 核心篇
  2. 使用veloticy-ui生成文字动画
  3. flask前端上传图片/文件
  4. Ubuntu16.04下安装python3.6.4详细步骤
  5. Python知识点 - Xpath提取某个标签,需要转换为HTML。
  6. UICollectionViewCell设置阴影
  7. SpringBoot突报java.lang.NoSuchFieldError分析
  8. vs远程调试iis
  9. 结巴分词demo
  10. npm install --save,npm install --save-dev,npm install