(整体)二分 || 折半搜索
Chester_King
虽千万人,吾往矣。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【BZOJ】2738 矩阵乘法 整体二分+树状数组
题目传送门伏地膜LYF大佬,连整体二分都会,不愧是一代神犇。向大佬低头,这位大佬讲的很详细,并且很好懂。整体二分,是一种离线的算法,就是对所有状态和询问一起二分。递归,每次对所有状态进行统计,然后根据当前所有状态的一半将当前所有询问进行划分。当所有状态只剩下一种时,就可计算当前所有询问的答案。当然,现在我还是初学整体二分,需要做更多的题目来熟练这种算法。附上AC代码原创 2017-05-24 19:01:29 · 463 阅读 · 2 评论 -
【BZOJ】3110 [Zjoi2013]K大数查询 整体二分+树状数组 || 树套树
题目传送门让我缓缓……写了整整三天,终于A掉了……这题,真的恶心啊……这题最大的问题就是细节的问题,在码代码的时候记得一定要保持自己的状态,不能有一点的松懈,否则就像我一样……WA了10+发,TLE了三四发,心累啊……这题还是整体二分,对于那些写树套树的大佬我只能表示%%%了。因为题目给出的条件是abs(c)我们把修改和询问一起整体二分,取操作区间的一半,对于左半边的修改操原创 2017-07-12 07:25:14 · 674 阅读 · 0 评论 -
【BZOJ】2679 [Usaco2012 Open]Balanced Cow Subsets 折半搜索+状压
题目传送门第一眼看到这题,以为可以直接大力搜索,T了一发以后发现时间复杂度为O(320)O(3^{20}),于是就想折半搜索。然而直接折半搜索WA了一发以后我停下了盲目的敲代码,仔细思考了题目。造了一组数据:“6 88 36 36 7 95 24”,发现{88,36,7}与{36,95}有两种组合情况,但是答案只会被加一次。于是想到状压,判断两个相等的集合内取了哪些数,开个bool数组去一下重即可。原创 2017-10-27 20:09:30 · 521 阅读 · 0 评论 -
【BZOJ】1770 [Usaco2009 Nov]lights 燈 折半搜索
题目传送门好像这题的正确姿势是高斯消元完爆搜自由源?不会写,留坑待填……再刷一波折半搜索,f[i]f[i]表示表示与第ii个点相连的点(包括自己)的二进制表示。考虑折半,搜索前半段,用mnmn数组表示实现当前状态的最小操作次数。搜索后半段,答案用mn[当前状态]+当前状态的补集的操作次数来更新即可。最后加上一个hash_table来去重即可。附上AC代码:#include <cstdio>#inc原创 2017-10-28 20:49:44 · 321 阅读 · 0 评论 -
【POJ】2728 Desert King 分数规划
题目传送门题目大意:给出nn个三元组(x,y,z)(x,y,z),第ii个三元组表示第ii个点的坐标为(x,y)(x,y)、权值为ww的点。两个点i,ji,j之间的距离为(xi−xj)2+(yi−yj)2−−−−−−−−−−−−−−−−−√\sqrt{(x_i-x_j)^2+(y_i-y_j)^2},权值为|wi−wj||w_i-w_j|,求权值与距离比例最小的生成树。这是一道经典的分数规划题目。话原创 2017-10-29 21:09:57 · 363 阅读 · 0 评论 -
【BZOJ】2654 tree 二分+kruskal
题目传送门好神的想法啊……这个二分好迷啊……我们可以二分一个值midmid,把所有白色的边都加上这个值,在最后计算边权和时减回去,也就相当于改变的白色边的优先级。然后刷kruskal,如果mst中的白色边数不小于给定的need则验证成功,修改二分的边界继续二分。附上AC代码:#include <cstdio>#include <cctype>#include <algorithm>using原创 2017-10-30 14:27:03 · 357 阅读 · 0 评论 -
【BZOJ】4552 [Tjoi2016&Heoi2016]排序 二分+线段树
题目传送门题解真的好机智啊……像我这种蒟蒻只能跪在地上%%%了。简化问题是非常必要的,否则就要用Treap套权值线段树这种(垃圾又恶心的)大数据结构了。有些时候我们会把无序的数据排序来简化问题,但是……你们肯定知道我要说什么的:这题就是把有序的数据进行无序处理来简化题目的……首先我们二分一个midmid来作为最后给定位置上的答案,然后对给出的数列进行无序处理:小于midmid的位置记为00,大于等于原创 2017-12-19 20:58:00 · 285 阅读 · 0 评论 -
【BZOJ】2527 [Poi2011]Meteors 整体二分+树状数组
题目传送门这题的整体二分还是挺好想到的,代码也挺好写的。(比BZOJ3110好写多……)取当期的陨石波数的一半加入树状数组中,判断当前每个国家拥有的陨石数是否达到需求量,若达到则放到左区间中,也就是减小陨石数,反之则放到右区间,增加陨石数。orzZH大佬,当讲课人在上面放出了这道题时,ZH大佬瞟了一眼,哼了一声:“这题不是水题吗?还需要讲?”ZH大佬太强啦QWQ,%%%%%,献上我原创 2017-07-11 09:43:41 · 444 阅读 · 0 评论 -
【洛谷】1466 集合 Subset Sums 折半搜索
题目传送门这题的直观感受就是折半搜索,但是无从下手……有点小尴尬……设等差数列求和之后的和为sumsum,如果sumsum为奇数显然无法分成两半,直接输出00;否则必定可以分成两个子集。考虑折半搜索,对所有出现过的值记录次数,然后直接利用乘法原理统计答案即可。p.s.这题的答案可能爆int,注意答案用long long来存。附上AC代码:#include <cstdio>using namespa原创 2017-10-23 14:34:30 · 508 阅读 · 0 评论 -
【BZOJ】4800 [Ceoi2015]Ice Hockey World Championship 折半查找
题目传送门上次省选就有大佬提过折半查找,但是因为我过于蒟蒻,所以一直都没有去学习这种算法。今天突发奇想,开了一发脑洞,学习一下这种算法。这题的折半查找思想是非常好的,可以优化许多题目,可以把时间复杂度硬生生降一半。(好强的算法。)折半查找,就是把数据分成两半,分别对它们进行操作,然后考虑这两半数据间的联系。(这TMD不是分治吗?)对于这题来说,就是把物品分成两半,然后分别求可行原创 2017-07-01 14:04:25 · 366 阅读 · 0 评论 -
【BZOJ】4326 NOIP2015 运输计划 二分+LCA+树上差分
题目传送门有了之前的铺垫,突然发现这题还是挺水的诶。(逃)题目要求最大时间的最小值,想到了二分,但是怎么去判断二分出来的值呢?我们开两个数组sumsum和vv,sumsum数组表示每条边的标记值,vv表示每条边的权值。我们把这两个本来是边的值转化到每条边深度较大的节点上,这个显然没有对答案产生影响,并且可以简化代码。现在我们要判断二分出来的值midmid,显然路径的权值和w≤midw \leq mi原创 2017-10-17 21:44:49 · 257 阅读 · 0 评论 -
【CODE[VS]】1230 元素查找 二分
题目传送门这是一篇无聊的水博客,请各位大佬慎入QwQ。很显然,这题只要是懂一点点基础知识的小学生都会做的题目,但是我们的重点不在这道题上。今天讲课时讲到了lower_bound和upper_bound函数,于是就去学了一发。这两个函数都包含在algorithm库里,用法也是挺简单的:lower_bound(st,ed,val)st和ed表示起止位置,遵循前闭后开的区间原则,原创 2017-08-08 11:05:47 · 256 阅读 · 0 评论 -
【HDU】3586 Information Disturbing 二分+树形dp
题目传送门我又一次感受到了初始化的重要性:我又错在了初始化上了……(多组数据死全家!!!)这题的思想还是挺好的,二分答案加上树形dp,分开来看都挺简单的,但合起来就需要一点脑洞了。我们可以二分一个答案出来,作为题目要求的最大边权值,然后用树形dp来判断这个答案是否成立。综上,这题就被完美的解决啦。附上AC代码:#include #include #include #d原创 2017-06-30 14:11:29 · 354 阅读 · 0 评论 -
【BZOJ】3993 [SDOI2015]星际战争 二分+网络流
题目传送门网络流的用法又涨姿势了——网络流可以用于判断答案的可行性。这题我们首先考虑建图:第ii个机器人向超级汇点连一条流量为aia_i的边。超级源点向第ii个武器连一条流量为??的边。(??表示流量暂时未定)如果第ii个武器可以打到第jj个机器人,就连一条流量为+∞+\infty的边。然后考虑二分一个时间midmid作为答案,这时考虑第2条建图,这时的??就等于bi×mi原创 2018-01-15 21:08:45 · 293 阅读 · 0 评论
分享