0
点赞
收藏
分享

微信扫一扫

折半搜索总结

醉倾城1 2022-01-25 阅读 46

折半搜索总结


当看到n非常小的时候,一般是(25~40),想暴力但是会T,这时候就可以想一想是否需要折半搜索

主要步骤有2个:
1.搜前一半,存答案
2.搜后一半,得到的结果和前一半去匹配

一般来说搜索只需要最普通的dfs即可,而存答案多和stl有关

经典例题:
L i g h t    s w i t c h e s Light\; switches Lightswitches(如果对半分容易T,那么预处理的时候多处理一点,处理20个,剩下在询问的时候处理即可)
X o r − P a t h s Xor-Paths XorPaths(显然在对角线处分开,这里处理的时候要记一下:当 x + y = = ( n + m ) / 2 + 1 x+y==(n+m)/2+1 x+y==(n+m)/2+1的时候, ( x , y ) (x,y) (x,y)就是对角线上的点了)
M a x i m u m    S u b s e q u e n c e Maximum \;Subsequence MaximumSubsequence(首先先把所有数字对m取模,然后求出前一半所有可能的和,后一半所有可能的和,设前一半的一个值为x,则在后一半里找比m-x小的第一个数即可)
L i z a r d    E r a : B e g i n n i n g Lizard \;Era: Beginning LizardEra:Beginning(枚举每个工作要分给哪些人,并用三进制状压记录方案就ok了,但是注意,在输出方案的时候,有最后一位对应的就是0,所以直接while(x)是不对的,应该给出明确的循环次数)

举报

相关推荐

0 条评论