UVALive 4850 Installations 贪心
题目链接
题意
工程师要安装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 贪心相关推荐
- UVALive - 4850 Installations 贪心+枚举
题目大意:工程师要安装n个任务,其中第i个服务Ji需要si单位的安装时间,截止时间为di,如果在截止时间之前完成任务,不会有任何惩罚,否则惩罚值为任务完成时间与截止时间之差,你的任务是让惩罚值最大的两 ...
- UVALive 4850 Installations——思维
按d排序保证最大惩罚最小,但是此时次大惩罚+最大惩罚不一定最小,可以牺牲一个任务使得最大惩罚增大,次大惩罚减小使得最终答案减小 #include <bits/stdc++.h> using ...
- UVa1467 Installations(贪心)
问题:已经n安装任务,知道每个任务完成所需时间serveTime及截止时间deadline,任务的惩罚时间定义为完成时间减去截止时间,要求最大惩罚时间和次在惩罚时间之和最小. 思路:使用贪心算法,将n ...
- I - Defeat the Enemy UVALive - 7146 二分 + 贪心
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 训练指南第一部分解题报告
主要是提供训练指南第一部分解题报告链接,后面会持续更新中 307 - Sticks (DFS+剪枝) 11292 - Dragon of Loowater (贪心) 11729 - Commando ...
- UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset
UVALive 8513 有2种人,每个人有自己的权值$A_i$ $B_i$ 当$A_i + B_i >=K$时 两个人可以配对 问最多多少人可以配对 解法 : 把$/{ A_i /}$ 排序 ...
- UVALive 4225 Prime Bases 贪心
Prime Bases 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&a ...
- UVALive 3959 Rectangular Polygons (排序贪心)
Rectangular Polygons 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/G Description In thi ...
- UVALive 6849 Landmine Cleaner(贪心、扫雷经典游戏)
题意: 给定N,M≤1000的数字雷图,试恢复原来的雷图,输入保证答案唯一给定N,M\le 1000的数字雷图, 试恢复原来的雷图, 输入保证答案唯一 有雷的格子显示3+9宫格雷数,无雷的格子显示0+ ...
最新文章
- java 基础---继承
- Zephyr OS 内核篇: 内核链表
- IM应用中如何计算富文本的高度
- 一个把图片保存到SQL数据库的工具
- Android布局之RelativeLayout
- ElasticSearch 入门总结
- Spring的注解@Autowired和@Resource的区别
- 教程资源合集(网上搜集整理)
- OneNote使用教程
- VUE源码解析(持续更新)
- bou计算机术语,2012年计算机一级考试模拟试题及参考答案(27)
- 怎样利用闲鱼赚差价?教你在闲鱼卖货赚钱!
- php进行Markdown解析
- 深度优先搜索--不撞南墙不回头
- 在虚拟机VirtualBox上安装苹果Mac OS X系统
- Practice II 字符串
- .net 操作达梦数据库
- 【网络通信】WSAStartup()函数,MAKEWORD的使用
- 求1的阶乘~N的阶乘之和
- 纸老虎【PATB1070】结绳 (25 分)