洛谷P1248 加工生产调度 贪心】的更多相关文章

正解:贪心 解题报告: 传送门$QwQ$ $umm$直接看可能比较难想,可以先考虑另一个题? 有$n$个小怪,每打一只小怪会扣$a_i$的血,打完之后会回升$b_i$的血,问至少要多少血量才能使全程血量大于等于零? $umm$这是个入门贪心题趴?就先把所有$b_i-a_i>0$的拿出来,然后按照$a_i$从小到大排序.然后对于$b_i-a_i<0$的,可以先反序看,就当作是从结尾走到那个转折点,就变成先扣$b_i$的血再回升$a_i$的血,所以就按$b_i$从小到大排序(反序从小到大,正序是从…
流水作业调度问题 有\(N\)个作业要在两台机器\(M_1\)和\(M_2\)组成的流水线上完成加工.每个作业\(i\)都必须先花时间\(a_i\)在\(M_1\)上加工,然后花时间\(b_i\)在\(M_2\)上加工. 确定\(N\)个作业的加工顺序,使得从作业1在机器\(M_1\)上加工开始到作业\(N\)在机器\(M_2\)上加工完为止所用的总时间最短. [算法] 直观上,最优调度一定让\(M_1\)没有空闲,\(M_2\)的空闲时间尽量短. Johnson算法:设\(N_1\)为\(a<…
[题解/模板]P1248 加工生产调度(贪心) 分析: \(A\)流水线的时间是确定的,所以现在就是要让\(b\)的时间尽量短 \(tB > tA\),除非所有东西都不需要\(b\).(t指结束时间) 性质: 对于一个\((a,b)\)若\(a< b\),让他先做更优秀. 同\(a<b\)的二元组,\(a\)小的更有优势.可以相对短一点点\(A,B\)时间差 对于一个\((a,b)\)若\(a\ge b\),不如在后面做这些东西,不然会让\(b\)空转. 同\(a \ge b\)的二元组…
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起归纳一下. [P1080国王游戏] 题目描述 恰逢 HH国国庆,国王邀请nn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 nn 位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣…
3008 加工生产调度  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n个产品的加工顺序,才能使总的加工时间最短.这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在A.B两车间加工完毕的时间. 输入描述 I…
题目传送门 解题思路: 最暴力的做法: bfs模拟,每次将一个阶段的所有点拿出来,将其所有直连的点都放进队列,知道本阶段结束,最后看1号点会不会在最后一个阶段被放入队列.(洛谷数据40分) 优化了一下代码: 上面的做法我用了两个队列,发现代码可以优化一下,用一个队列.(洛谷数据55分). 正解: 对于一个点,如果它加工的零件是偶数阶段,则在一定范围内与它偶数距离的点都要提供原料. 对于一个点,如果它加工的零件是奇数阶段,则在一定范围内与它奇数距离的点都要提供原料. 那么这个一定范围是多少呢? 就…
题目大意:某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工.某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n个产品的加工顺序,才能使总的加工时间最短.这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在A.B两车间加工完毕的时间. 题解:可以先考虑只有两个物品的情况,设两个物品的加工时间分别为 \(a_1,b_1,a_2,b_2\),则先加工 A 再加工 B 的总时间为 \(a_1+max(b_1,a_2)+…
题意 题目链接 Sol 这题就是一个很显然的贪心... 首先二分一个答案,然后check是否可行.check的时候我们需要对每个位置\(i\),维护出所有左端点在\(i\)左侧,右端点在\(i\)右侧的所有区间.最优策略一定是加右端点最远的. 然后就做完了, 复杂度\(O(nlogn)\) #include<bits/stdc++.h> #define Fin(x) freopen(#x".in", "r", stdin); #define LL lon…
正解:贪心 解题报告: 传送门! 首先最小值最大显然考虑二分?然后就二分一个值mid,从左往右考虑,对于小于等于mid的点显然可以求出这个点至少要加几次,然后找到覆盖这个点的右端点max的区间区间加上它要加的数就好 然后具体的操作和短路那题差不多,,,同差分+开个数组+全局变量,over 挺显然的贪心?不解释了QAQ 那就等下直接放代码了QAQ (我怎么觉得我题解越来越简洁了鸭嘻嘻 #include<bits/stdc++.h> using namespace std; #define il…
正解: 贪心+离散化+逆序对 解题报告: 链接在这儿呢quq 这题其实主要难在想方法吧我觉得?学长提点了下说用贪心之后就大概明白了,感觉没有很难 但是离散化这里还是挺有趣的,因为并不是能很熟练地掌握离散化(昂其实理解得还不错……主要实现太少TT) 所以在这里放一下 #include<bits/stdc++.h> using namespace std; struct str { long long hei,id; }mat1[],mat2[]; ],g[],p[],ans; long long…
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3211Dream City Time Limit: 1 Second      Memory Limit: 32768 KB JAVAMAN is visiting Dream City and he sees a yard of gold coin trees. There are n trees in the yard. Let's call them tree 1,…
正解:贪心 解题报告: umm,,,其实我还不会 废话我这么菜怎么可能懂QAQ 先占坑,想学习这题很久了呢QAQ…
[题目描述:] cyrcyr今天在种树,他在一条直线上挖了n个坑.这n个坑都可以种树,但为了保证每一棵树都有充足的养料,cyrcyr不会在相邻的两个坑中种树.而且由于cyrcyr的树种不够,他至多会种k棵树.假设cyrcyr有某种神能力,能预知自己在某个坑种树的获利会是多少(可能为负),请你帮助他计算出他的最大获利. [输入格式:] 第一行,两个正整数n,k. 第二行,n个正整数,第i个数表示在直线上从左往右数第i个坑种树的获利. [输出格式:] 输出1个数,表示cyrcyr种树的最大获利. 输…
题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的.此外,就像每头奶牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的.每天Marry乳业可以从奶农手中采购到小于或者等于奶农最大产量的整数数量的牛奶. 给出Marry乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量.计算采购足够数量的牛奶所需的最小花费. 注:每天所有奶农…
题目传送门:这里是萌萌哒传送门(>,<) 啊♀,据说这题有个完全贪心的做法,但是要维护太多东西好麻烦的(>,<),于是就来口胡一发三分的做法. 思路很简单,假设我指定了一个x,要求通过调整,所有的成绩都最迟在第x天出. 调整到第x天的代价是很容易通过贪心计算出来的啦,复杂度线性. 然后我们考虑从大到小枚举x,每次计算出代价之后更新答案. 再然后我们大胆猜想这是一个单峰函数! 既然都单峰啦那直接三分就好啦(>,<). 实际上我不知道它是不是真的是单峰函数...但是就AC了…
题目传送门 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? 输入输出格式 输入格式: 第一行,一个整数N. 第二行,N个整数,表示小C的序列. 输出格式: 一行,一个整数,表示小C需要的最小代价. 输入输出样例 输入样例#1: 复制 6 8 4 5 3 2 7 输出样例#1: 复制 34 说明 数据范围: 对于30%的数据,1<=N<=10: 对于全部的数据,1&l…
题目链接 这个题可以贪心 我们首先想:对于所有产品,我们大致可以将其分为三类: ①.在A车间的时间要比B车间长. ②.两者一样. ③.在B车间的时间要比A车间长. 对于这三大类,怎么安排顺序? 可以看出,①类是消耗B车间任务,③类是给B车间增加任务. 我们想,要想时间最快,必须要尽可能的让AB两车间没有空闲的工作.如果我们将①放在了开头,而③放在了结尾,那必然会导致开始时B工作的时间断断续续,最后等A工作完了,B还剩下一大堆任务. 所以我们要尽可能的将③放在开始,①放在结尾,②安排在中间就可以(…
首先考虑分割线能分割一条线当且仅当分割线一个端点在这条线的ab中间,另一端点在外面,也就是分割线对应的一条弧不能同时有这条线的两个端点 每条线的两端点都染同色,然后分段,一段里面颜色互不相同,分割线就是一段的开始连到结尾,割掉这段里的颜色的线,求最小的段数ans,答案就是(ans+1)/2 暴力是要枚举起点,考虑优化,一个起点不是最优一定是从最优分割的一个块的中间开始分割的,也就是第一段向前延伸还能加进新点,现在考虑最短的线的a+1这个点作为起点,那么这块一定能延伸到最短的线的b,因为这是最短的…
https://www.luogu.org/problemnew/show/P2887 感觉可以: 把防晒霜拆点限制流量为瓶数,奶牛拆点限制流量为1,当某个防晒霜与奶牛匹配时连一条边,求最大流.但是这样的边数好像太多了. 最后忍不住去看题解,结果是贪心,好像的确是唉………
https://www.luogu.org/problemnew/show/P1987 这道题,假如是n==k,也就是把所有的树都砍完,我就知道要贪心去做,因为树给的初始金币是固定的,每天掉金币,当然是掉得越快的树先砍掉减少损失.但是假如树的金币不能掉成负数,分几种情况. 1.掉得快的树会先变成0,掉得慢的树不会先变0,(树A:3(-4),树B:3(-2),先A后B:4,先B后A:3)假如掉得快的树剩余的金币比掉得慢的树掉的数量少,那么先砍掉掉得慢的(树A:2(-5),树B:4(-3),先A后B…
题目:https://www.luogu.org/problemnew/show/P1315 问题是想不明白改动一条边会对后面造成怎样的影响: 实际上影响的会是一段,当某个车站出发时间受其来人牵制时,前面的时间减小就不会起到效果: 所以对于每个车站,求一个 g[i] 表示最远能影响到哪个车站,则修改 i 后面那条边,所有到达点在 i ~ g[i] 的人的时间都缩短1: 每次找一个缩短最大的边,然后重新计算每个车站的实际到达时间和 g[i],其实就是贪心. 代码如下: #include<iostr…
题目:https://www.luogu.org/problemnew/show/P2577 题意:n个人每个人有一个打饭时间和吃饭时间,将他们分成两个队伍.每个人打到饭之后就马上去吃饭.问怎么安排可以让总体的吃饭时间最短. 思路:首先贪心还是很好想的.某个队伍的总吃饭时间实际上是打饭结束+吃饭时间最晚的那个时间. 一个队伍前面的那些人,如果他们吃完饭的时间都不超过总的排队时间的话,根本不需要考虑他们.而队伍的排队时间如果安排好了,是固定的.跟安排的顺序没有关系. 所以我们应该要把吃饭时间长的往…
题目传送门 Hotel 题目描述 你经营着一家旅馆,这家旅馆有 n 个房间,每个房间有维护费用和容量.其中第 i 个房间的维护费用为 ci​,容量为 pi​ 人. 现在有 m 个订单,每个订单有两个参数:vi​,di​ ,其中 vi​ 表示这个订单支付的租金,di​​​ 表示人数. 你现在得要合理选择一些订单,并放弃其他订单,使得每个选择的订单被安排在同一间房间内,且人数不超过这个房间的容量限制.当然,两个不同的订单也不能被安排在同一间房间内. 现在你想要知道,在最多选出o 个订单时的最大收益.…
题目传送门 题目背景 历史/落在/赢家/之手至少/我们/拥有/传说谁说/败者/无法/不朽拳头/只能/让人/低头念头/却能/让人/抬头抬头/去看/去爱/去追你心中的梦 题目描述 又想起了四月.如果不是省选,大家大概不会这么轻易地分道扬镳吧?只见一个又一个昔日的队友离开了机房.凭君莫话封侯事,一将功成万骨枯.梦里,小$F$成了一个给将军送密信的信使.现在,有两封关乎国家生死的密信需要送到前线大将军帐下,路途凶险,时间紧迫.小F不因为自己的祸福而避趋之,勇敢地承担了这个任务.不过,小$F$实在是太粗心…
题目链接:https://www.luogu.org/problem/P2672 这道题目是贪心,贪心的思想是: 选择 \(m\) 户人家的最大疲劳值应该是以下两种方案中的较大值: 方案一:选择 \(a[i]\) 最大的 \(m\) 户人家: 方案二:选择 \(a[i]\) 最大的 \(m-1\) 户人家,以及剩下的 \(n-(m-1)\) 户人家中 \(2 \times s[i] + a[i]\) 最大的那户人家 所以,我们可以给 \(n\) 户人家按照 \(a[i]\) 从大到小金星排序.…
题意:有\(n\)个罪犯,\(m\)对罪犯之间有仇,现在将这些罪犯分到两个监狱里去,问两个监狱里有仇罪犯之间的最大权值最小为多少. 题解:先按边权从大到小排序,然后贪心,边权大的两个罪犯,我们一定要先让他们两人分到不同的监狱中,这里我们就可以用并查集来维护, 用种类并查集每次维护两个罪犯的关系,如果他们不在同一集合,就将他们合并到两个不同的集合, 如果他们在同一个集合,那么就直接输出他们的权值. 代码: #include <iostream> #include <iomanip>…
深刻的教训,不要写错读入 #include <cstdio> #include <algorithm> using namespace std; ; ; ,u[MAXM],v[MAXM],w[MAXM],first[MAXN],next[MAXM]; ,n,fa[MAXN]; inline int qread(void){ ; char s; s=getchar(); ') s=getchar(); '){ x*=; x+=s-'; s=getchar(); } return x;…
题意 题目链接 Sol 显然整个序列的形态对询问没什么影响 设权值\(>=s\)的有\(k\)个. 我们可以让这些数每次都被选择 那么剩下的数,假设值为\(a_i\)次,则可以\(a_i\)次被选择 一个显然的思路是每次选最大的C个 那么只需要判断\(\sum a_i >=(c - k)*s\)即可 权值线段树维护一下 #include<bits/stdc++.h> #define Pair pair<int, int> #define MP(x, y) make_pa…
题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E,T.这三个数表示该居民想在B和E之间最少种T棵树.当然,B≤E,居民必须记住在指定区不能种多于区域地块数的树,所以T≤E-B+l.居民们想种树的各自区域可以交叉.你的任务是求出能满足所有要求的最少的树的数量. 写一个程序完成以下工作: 输入输出格式 输入格式: 第一行包含数据N,区域的个数(0<N≤…
传送门 解题思路 很容易想到用最短路来解决这一道问题(题解法),因为两个点之间可以互相无限走,所以如果到某个点的最短路是x,那么x+2,x+4也一定能够达到. 但是如何保证这是正确的呢?比如说到某个点的最短路是x,为什么不可能走一下弯路,是某一条路径的长度是x+1或者x+3或者x+5呢? 所以就用到了奇偶最短路.所谓奇偶最短路,就是对于每一个点,记录下走偶数步的最短路(ou[i])和走奇数步的最短路(ji[i]),转移式为: ji[v]=min(ou[u]+1,ji[v]); ou[v]=min…