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 = , MAX2 = , sum = ;
for(int i = ; 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 + ; 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 = ; i < n; i++)
scanf("%d%d",&T[i].s, &T[i].d);
sort(T,T+n); int cur = , MAX1 = , MAX2 = , t = ;
for(int i = ; 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 = ; i < pos; i++)
ans = min(ans,solve(i));
printf("%d\n",ans);
}
return ;
}
UVALive 4850 Installations 贪心的更多相关文章
- UVALive 4850 Installations
题目大意:有若干个任务,每个任务耗时si,期限为di,同一时间只能做一个任务.对于一个任务,惩罚值为max(0,完成时间-期限).问怎么安排,使(最大惩罚值+次大惩罚值)最小,O(n^2). 如果没有 ...
- UVAlive 2911 Maximum(贪心)
Let x1, x2,..., xm be real numbers satisfying the following conditions: a) -xi ; b) x1 + x2 +...+ xm ...
- uvalive 2911 Maximum(贪心)
题目连接:2911 - Maximum 题目大意:给出m, p, a, b,然后xi满足题目中的两个公式, 要求求的 xp1 + xp2 +...+ xpm 的最大值. 解题思路:可以将x1 + x2 ...
- UVALive - 4225(贪心)
题目链接:https://vjudge.net/contest/244167#problem/F 题目: Given any integer base b ≥ 2, it is well known ...
- UVALive 4863 Balloons 贪心/费用流
There will be several test cases in the input. Each test case will begin with a line with three inte ...
- UVALive - 6268 Cycling 贪心
UVALive - 6268 Cycling 题意:从一端走到另一端,有T个红绿灯,告诉你红绿灯的持续时间,求最短的到达终点的时间.x 思路:
- UVALive 4731 dp+贪心
这个题首先要利用题目的特性,先贪心,否则无法进行DP 因为求期望的话,越后面的乘的越大,所以为了得到最小值,应该把概率值降序排序,把大的数跟小的系数相乘 然后这种dp的特性就是转移的时候,由 i推到i ...
- UVALive 3835:Highway(贪心 Grade D)
VJ题目链接 题意:平面上有n个点,在x轴上放一些点,使得平面上所有点都能找到某个x轴上的点,使得他们的距离小于d.求最少放几个点. 思路:以点为中心作半径为d的圆,交x轴为一个线段.问题转换成用最少 ...
- UVALive 6911---Double Swords(贪心+树状数组(或集合))
题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
随机推荐
- oracle mysql gbk varchar varchar2
http://www.cnblogs.com/kxdblog/p/4042331.html https://wenku.baidu.com/view/97524e0f844769eae009ed80. ...
- Laravel 5.5 文档 ] 快速入门 —— 安装配置篇
服务器要求 Laravel 框架对PHP版本和扩展有一定要求,不过这些要求 Laravel Homestead 都已经满足了,不过如果你没有使用 Homestead 的话(那真是一件很遗憾的事情),有 ...
- [日常工作] cmd以及bash 直接使用当前目录的方法
1. 从知乎学到了一点.. 2. 之前想在比如f:\a\b 目录下执行cmd命令的时候 总是需要先 f: 再cd目录的方式. 3. 知乎上面学到 发现可以通过在当前目录下面 输入 cmd 或者是 b ...
- Laravel自定义 封装便捷返回Json数据格式引用
一般返回数据格式 return response()->json(['status' => 'success','code' => 200,'message' => '关注成功 ...
- HADOOP实战
一.软件版本Centos6.5.VMware 10CDH5.2.0(Hadoop 2.5.0)Hive-0.13 sqoop-1.4.5 二.学完课程之后,您可以:①.一个人搞定企业Hadoop平台搭 ...
- DTD举例一
DTD举例一: <!--动作库约束文件--> <!DOCTYPE actionGroup [ <!ELEMENT actionGroup (action*)> <! ...
- caffe训练resume
MODEL=${EXP}/model/${NET_ID}/pspnet101_VOC2012.caffemodel SNAPSHOT=${EXP}/model/${NET_ID}/train_iter ...
- BZOJ3425[POI2013]Polarization——DP+bitset+分块
题目描述 Everyone knew it would only be a matter of time. So what? Faced for years on, a peril becomes t ...
- BZOJ2819Nim——树链剖分+线段树+Nim游戏
题目描述 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...
- JavaScript限制前端页面用户表单输入
onkeyup事件 onkeyup 事件会在键盘按键被松开时发生. 内容来源:自成e家 1.只能输入数字 <input onkeyup = "value=value.replace(/ ...