题目链接 

题意

工程师要安装n个服务,其中服务Ji需要si单位的安装时间,截止时间为di。超时会有惩罚值,若实际完成时间为ci,则惩罚值为max{0,ci-di}。从0时刻开始执行任务,问惩罚值最大的两个服务的惩罚值之和的最小是多少?

分析

乍一看似乎要二分,但实际上并不是。贪心来做,按di从小到大安排任务,当di相等时,让完成时间短的排前,这样安排任务一定时更优的,但是并不能满足题目的要求。于是需要从两个最大惩罚值的前面挑选一个任务,并将它放置在后面,然后更新答案即可。

#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 510
struct Task{  int s, d;  bool operator <(const Task t) const{  if(t.d == d)  return s < t.s;  else  return d < t.d;    }
}T[maxn];
int pos, n;  int solve(int cur) {  int MAX1 = 0, MAX2 = 0, sum = 0;  for(int i = 0; i <= pos; i++) {  if(i == cur)  continue;     sum += T[i].s;  if(sum - T[i].d >= MAX2)   MAX2 = sum - T[i].d;  if(MAX2 > MAX1)  swap(MAX1,MAX2);  }  sum += T[cur].s;  if(sum - T[cur].d >= MAX2)  MAX2 = sum - T[cur].d;  if(MAX2 > MAX1)  swap(MAX1,MAX2);  for(int i = pos + 1; i < n; i++) {  sum += T[i].s;  if(sum - T[i].d >= MAX2)  MAX2 = sum - T[i].d;  if(MAX2 > MAX1)  swap(MAX1,MAX2);  }  return MAX2 + MAX1;
}  int main() {  int test;  scanf("%d",&test);  while(test--) {  scanf("%d",&n);  for(int i = 0; i < n; i++)  scanf("%d%d",&T[i].s, &T[i].d);  sort(T,T+n);  int cur = 0, MAX1 = 0, MAX2 = 0, t = 0;  for(int i = 0; i < n; i++) {  cur += T[i].s;  if(cur - T[i].d >= MAX2) {  MAX2 = cur - T[i].d;  pos = i;      }  if(MAX2 > MAX1)  swap(MAX1,MAX2);  }  int ans = MAX1 + MAX2;  for(int i = 0; i < pos; i++)  ans = min(ans,solve(i));  printf("%d\n",ans);  }  return 0;
}  

转载于:https://www.cnblogs.com/fht-litost/p/8912083.html

UVALive 4850 Installations 贪心相关推荐

  1. UVALive - 4850 Installations 贪心+枚举

    题目大意:工程师要安装n个任务,其中第i个服务Ji需要si单位的安装时间,截止时间为di,如果在截止时间之前完成任务,不会有任何惩罚,否则惩罚值为任务完成时间与截止时间之差,你的任务是让惩罚值最大的两 ...

  2. UVALive 4850 Installations——思维

    按d排序保证最大惩罚最小,但是此时次大惩罚+最大惩罚不一定最小,可以牺牲一个任务使得最大惩罚增大,次大惩罚减小使得最终答案减小 #include <bits/stdc++.h> using ...

  3. UVa1467 Installations(贪心)

    问题:已经n安装任务,知道每个任务完成所需时间serveTime及截止时间deadline,任务的惩罚时间定义为完成时间减去截止时间,要求最大惩罚时间和次在惩罚时间之和最小. 思路:使用贪心算法,将n ...

  4. I - Defeat the Enemy UVALive - 7146 二分 + 贪心

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  5. 训练指南第一部分解题报告

    主要是提供训练指南第一部分解题报告链接,后面会持续更新中 307 - Sticks  (DFS+剪枝) 11292 - Dragon of Loowater (贪心) 11729 - Commando ...

  6. UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset

    UVALive 8513 有2种人,每个人有自己的权值$A_i$ $B_i$ 当$A_i + B_i >=K$时 两个人可以配对 问最多多少人可以配对 解法 : 把$/{ A_i /}$ 排序 ...

  7. UVALive 4225 Prime Bases 贪心

    Prime Bases 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&a ...

  8. UVALive 3959 Rectangular Polygons (排序贪心)

    Rectangular Polygons 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/G Description In thi ...

  9. UVALive 6849 Landmine Cleaner(贪心、扫雷经典游戏)

    题意: 给定N,M≤1000的数字雷图,试恢复原来的雷图,输入保证答案唯一给定N,M\le 1000的数字雷图, 试恢复原来的雷图, 输入保证答案唯一 有雷的格子显示3+9宫格雷数,无雷的格子显示0+ ...

最新文章

  1. java 基础---继承
  2. Zephyr OS 内核篇: 内核链表
  3. IM应用中如何计算富文本的高度
  4. 一个把图片保存到SQL数据库的工具
  5. Android布局之RelativeLayout
  6. ElasticSearch 入门总结
  7. Spring的注解@Autowired和@Resource的区别
  8. 教程资源合集(网上搜集整理)
  9. OneNote使用教程
  10. VUE源码解析(持续更新)
  11. bou计算机术语,2012年计算机一级考试模拟试题及参考答案(27)
  12. 怎样利用闲鱼赚差价?教你在闲鱼卖货赚钱!
  13. php进行Markdown解析
  14. 深度优先搜索--不撞南墙不回头
  15. 在虚拟机VirtualBox上安装苹果Mac OS X系统
  16. Practice II 字符串
  17. .net 操作达梦数据库
  18. 【网络通信】WSAStartup()函数,MAKEWORD的使用
  19. 求1的阶乘~N的阶乘之和
  20. 纸老虎【PATB1070】结绳 (25 分)

热门文章

  1. [WinError 6] 句柄无效。
  2. php+科研课题管理 毕业设计-附源码170914
  3. 巨斧砍大树-sdut
  4. 中国互联网公司如何进军海外,先行者六点血泪教训
  5. 通过扫码下载安卓和ios安装包
  6. 陈正康考研英语长难句 26~50
  7. 那个英雄辈出的年代——《资治通鉴》等历史札记有感2000字
  8. 淘宝的商品中心和类目体系是怎么设计的 | 极客分享第 16 期
  9. Python实现奇数阶幻方(不用numpy)
  10. 2021总结2022规划