搜索<3>——折半搜索(meet in the middle)

本文介绍了折半搜索在两个经典算法题目中的应用,包括动态规划求解和状态重复的处理方法,展示了如何通过折半策略优化搜索过程并解决计数问题。

我上网一搜折半搜索,结果跳出来的为什么全是二分??????????????????????????气死我了。

回归正题,折半搜索指将整个搜索过程分为两部分,并对两部分分别进行搜索,最后得到两个答案序列,将这两个答案序列进行合并,得到最终的答案。合并时,我们一般使用二分或尺取法合并,这一是meet in the middle最难的一部分。这样可以大大降低复杂度,比如原来\Theta ({2}^{^{n}})的这样就变成了\Theta (2^{\frac{n}{2}})。来看一些题吧。

P4799:

很经典的题目了。首先,可以状压枚举每种情况,但是\Theta (2^{n})TLE,所以考虑折半搜索。将前一半的搜索状态存入a数组,后一半存入b数组。难点主要在于最后答案的组合统计。我们可以现将a或b数组sort,然后通过枚举另一个数组中的状态,来实现统计答案。令pos为当前枚举的x的第一个x+a_{pos}>m,那么在pos之前的位置都可以贡献答案,所以ans+=pos-1。那么找pos的工程可以用upper_boun

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值