UVALive - 4850 Installations 贪心+枚举
题目大意:工程师要安装n个任务,其中第i个服务Ji需要si单位的安装时间,截止时间为di,如果在截止时间之前完成任务,不会有任何惩罚,否则惩罚值为任务完成时间与截止时间之差,你的任务是让惩罚值最大的两个任务的惩罚之和最小
解题思路:这题很容易就想到按di进行排序,di小的先做,如果di相同的话,就si小的先做,这样的思路是正确的,能保证大局的最优化,但是这样无法保证惩罚值最大的两个任务的惩罚值之和达到最小,因为有可能以牺牲一个任务的代价使得结果发生变化。这里的话,就要考虑一下要牺牲的任务在哪个位置了。
牺牲的任务只能在两个最大惩罚值中的最后一个任务的前面,只有牺牲前面的任务才能使最大惩罚值的值减小,注意这里是牺牲,就表示有可能牺牲这个任务后,该任务的惩罚值变成了最大惩罚值的其中一个。
#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;elsereturn 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;
}
UVALive - 4850 Installations 贪心+枚举相关推荐
- UVALive 4850 Installations 贪心
题目链接 题意 工程师要安装n个服务,其中服务Ji需要si单位的安装时间,截止时间为di.超时会有惩罚值,若实际完成时间为ci,则惩罚值为max{0,ci-di}.从0时刻开始执行任务,问惩罚值最大 ...
- UVALive 4850 Installations——思维
按d排序保证最大惩罚最小,但是此时次大惩罚+最大惩罚不一定最小,可以牺牲一个任务使得最大惩罚增大,次大惩罚减小使得最终答案减小 #include <bits/stdc++.h> using ...
- CodeForces - 803C Maximal GCD(贪心 + 枚举)
链接一 链接二 You are given positive integer number n. You should create such strictly increasing sequence ...
- D. Boboniu Chats with Du (664 div2 贪心 枚举)
D. Boboniu Chats with Du 题意: 给 n 个快乐值,你可以按任何顺序在群里说出快乐值为 kik_iki 的话,当 m<kim<k_im<ki 时,你会获得 ...
- 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 ...
- UVA 1616 Caravan Robbers 【二分+贪心+枚举分母】
题目链接 题意 给n个互不相包含的区间,求出一个长度的最大值,使得可以在每个区间中选出这样一个长度的子区间,这些子区间互不相交.结果用分数表示 分析 先考虑如果给定了区间长度能不能选出这样的区间.因为 ...
- Codeforces 1395 D. Boboniu Chats with Du(贪心枚举答案)
传送门 题意: 思路: 先把大于m的放在b数组,小于m的放在a数组 枚举一下最终结果中用了几个b,取一个最大值即可 看代码应该能明白(有注释) 代码: int a[MAXN],b[MAXN]; ll ...
- P2102 地砖铺设(dfs贪心)
P2102 地砖铺设(dfs&贪心) 枚举每个点作为正方形左上角进行扩展,只需对左边界和上边界进行判断即可,然后正方形填充.因为要求最小,所以每次就特判右上角的点是否能更小,如果不行就brea ...
最新文章
- 吴恩达老师,被曝靠「教书」实现首个IPO上市,估值50亿美元
- Kimera:一个基于度量语义的SLAM开源库
- iOS 性能优化-启动优化、main函数之前优化-二进制重排
- 《机器人学经典教程》——2.3 人工智能
- 898. 子数组按位或操作
- js实现html页面倒计30秒,javascript实现简单页面倒计时
- Eclipse-cvs指南
- 女生心中的理想男生!这些条件你符合几条?
- Docker 网络命名空间
- 图解Android - Android GUI 系统 (1) - 概论
- 前端获取本地ip和外网ip
- 第七章、Tiny4412 U-BOOT移植七 DDR内存配置
- 01 ArcGIS空间分析--水文分析--利用水文分析方法提取山谷山脊线
- android发送http post请求函数带参数带返回数据 静态类 源码
- 拼多多店铺如何快速装修?
- UG二次开发 创建圆柱和简单孔UF_MODL_create_simple_hole
- 使用 OpenSSL 加密和解密文件
- 神经网络量化入门--基本原理
- workbench设置单元坐标系_节点坐标系:很多Workbench结构用户不知道的重要概念
- C语言画奥运五环以及五角星