贪心算法
DOFYPXY
这个作者很懒,什么都没留下…
展开
-
[2017雅礼集训]day11 T1 决斗 平衡树+贪心
题目大意:有N个物品不均匀的放在N个盒子里(有些盒子可能很多,有些盒子可能没有),每个物品和每个盒子都有一个权值,要让每个盒子中只能留下一个物品,第i个盒子多余的物品溢出到第i+1个盒子中(n溢出到1)。求一种方案使得溢出完成后,使满足盒子中物品的权值大于该盒子的权值的盒子尽可能多,输出满足条件的最多盒子数。 数据范围:40%:所有物品开始放在一个盒子里。 100%:N<=5e原创 2017-03-18 11:32:40 · 889 阅读 · 0 评论 -
[2018雅礼集训1-16]序列 爆搜+贪心
题面 首先问题转化为选取一个(Mi,Vi)(M_i,V_i)的集合,该集合必须满足若Mk|lcm{Mi}M_k|lcm\{M_i\},(Mk,Vk)(M_k,V_k)必须在集合中,最大化∑Vi\sum V_i。 先考虑所有MM都两两互质的情况,对于每个元素我们都可以贪心选或不选。 然后我们想到暴力枚举lcmlcm,就是枚举lcmlcm每个质因子及其指数,但这样复杂度不可接受。 考虑把质因子原创 2018-01-18 20:51:14 · 593 阅读 · 0 评论 -
[BZOJ1034]泡泡堂 贪心
田忌赛马那样贪心。 先把A,B数组排序,假设要让A尽可能多赢,按照以下策略。 假设A最弱的强于B最弱的,B最弱的一定会输,所以派A最弱的去赢它。 假设A最强的强于B最强的,A最强的一定会赢,所以被派去赢B最强的。 假设两个都不满足,那么A一定要输一把,于是派A最弱的应付掉B最强的即可。 让B尽可能多赢同理。 代码:#include<iostream>#include<cstdio>#原创 2017-10-26 07:41:06 · 468 阅读 · 0 评论 -
[2017纪中11-8]购物 贪心+优先队列
题面 这题有点像samjia2000出的三元组。。。 考虑把物品按Qi从小到大排序,那么一定有一个分界点,使得在这个点之前的物品要么买Pi要么买Qi,这个点之后的物品要么买Pi,要么不买(可以想象一下如果之前有一个x不买,之后有一个买Qy,买Qx不买y一定更优)。 于是设s[i]为使用至多k张优惠券买下1~i所有物品(或Pi或Qi)最少需要的钱(经典的二元组问题,强制选某一种然后把两者之差扔进原创 2017-11-10 15:14:11 · 363 阅读 · 0 评论 -
[2017纪中10-22]清兰 贪心+优先队列
题目链接:https://jzoj.net/senior/#main/show/5413 70pts: 使用柯西不等式可以证明均分一定是最优的。 假设两个数的差为 d,那么分为 k 份时对 f(x)的贡献是 分成 k+1 份时,增量为 发现随着 k 的增大,将 k 加一的改进值(增量的相反数)会越来越小,作用越来 越弱。因此,相当于有 n-1 个递减序列,取出不超过 m 个使得它原创 2017-10-23 08:23:28 · 297 阅读 · 0 评论 -
[BZOJ2525][Poi2011]Dynamite 二分答案+贪心+树型DP
先二分一个最短时间t,判断是否在最多选D个的情况下满足。 每个点设一个权值w,w<0表示其子树中(最远的未能在t时间引燃的炸药的离它的距离+1),w>0表示其子树中(炸药全部能引燃,而且还可以向上传递剩余的时间+1),w=0表示子树全部引燃但已经没有向上剩余。 设mxt表示其儿子中w的最大值,mit表示最小值,f[i]表示当前情况下子树中最少需要的引燃点数,转移如下: if(mxt>=-m原创 2017-10-30 20:03:04 · 401 阅读 · 0 评论 -
[2017纪中10-28]三元组 贪心+排序/优先队列
题面 考虑 X=0 的时候怎么做,显然是先强制所有都选择 y[i],然后按照 z[i]-y[i]从大到小排序,然后选择前 Z 大的更改为 z[i]。 那么当 X>0 的时候,我们先强制所有都选择 x[i],然后将 z[i]-y[i]从大到小排序,枚举一个 z[i]-y[i]的分界值,选择 z[i]都在分界值以前,选择 y[i]的都在分界值以后,那么可以发现,由于前面已经强制都选择 x[i],那么原创 2017-10-30 07:48:00 · 603 阅读 · 0 评论 -
[2017纪中10-28]序列操作 贪心+线段树/二分
题面 显然每次操作贪心对最大的c[i]减一是正确的。但如果从大到小排序,减前面c[i]个并不能保证有序。例如4,3,2,2,2,1,c[i]=3,减得4,3,1,2,2,1。我们应该把第c[i]个数求出来,>c[i]的照常减,=c[i]的优先减靠右的即可。线段树维护。 听说还可以二分? 代码:#include<iostream>#include<cstdio>#include<algori原创 2017-10-30 07:42:01 · 484 阅读 · 0 评论 -
[2017纪中10-21]Deep 贪心 结论题
题目链接:https://jzoj.net/senior/#main/show/5407 先考虑双方水晶都为1的情况,显然先手会输给对手两分。 感性理解,先手吃亏。。。所以先手每次给出一个水晶,后手都会让先手得到这一分来保住自己后手的地位(先手得到A-1分),直到先手把最后一个水晶给了出来,后手也开是给出水晶,那么后手所有的水晶和先手最后一个水晶都转化为后手的分(B+1分)。答案就是A-B-原创 2017-10-22 08:21:44 · 276 阅读 · 0 评论 -
[BZOJ4576]262144 分治/区间DP
只有我是鬼畜的分治做法吗。。。先形象的理解,假如某一个很小的数孤零零的在那里,它阻断了左右两边的合并,导致问题可以被分治解决考虑从小的数字往大的数字合并,若有一2*k长度的相同数字块,我们可以直接将数字加一而长度变为k,若有一2*k+1长度的,则必定会阻断左右,则要分合并后的k个分给左边和右边两种情况讨论。solve(l,r,b)表示把l到r的中的b元素全部合并所能的到的最大值。用双向链表维护上述数原创 2017-10-21 07:22:58 · 365 阅读 · 0 评论 -
[2017雅礼集训]day4 T1 洗衣服 贪心
其实我也不知到为什么洗衣服和晒衣服是独立的。。。 既然是独立的,我们就贪心的把每件衣服最快能洗完的时刻和最快能烘干的时刻分别先预处理出来,就是贪心的往当前结束时间最早的机器里放(堆维护)。 然后两个数组一个正着一个倒着加起来取个max就可以了。 代码:type node=record dt:int64; id:longint; end;var l,n,m,i,j,si原创 2017-04-17 20:15:07 · 1421 阅读 · 0 评论 -
[联合集训6-21] 最小拓扑序 贪心
首先可以发现对于每个点vvv最多添加一条边指向它,假设添加了边x→v,y→v(x>y)x→v,y→v(x>y)x\to v,y\to v(x>y) 换成x→y,y→vx→y,y→vx\to y,y\to v不会更劣。 我们贪心选点加入拓扑序。那么考虑当前局面一个入度为000的点的集合,我们会在当前可添加边数允许的情况下,尽可能选择一个编号大的点放入拓扑序,假设我们选择点iii,那么对...原创 2018-06-21 22:16:02 · 331 阅读 · 0 评论