折半搜索 meet in the middle
介绍
当直接搜索可能超时(如复杂度为 \(\mathcal O(2^{40}),\mathcal O(3^{20})\),或一个 \(n\) 较大且 \(k\) 较小的 \(\mathcal O(n^k)\))时,可以考虑。
适用于求方案数的问题。
思想
1. 标准的对半搜索
即,将原本需要枚举的集合划分为等大的两个子集,分别枚举算出子集的答案,然后组合出总答案。
2. 非均匀分界的折半搜索
非均匀分界点通常用于混合算法。一部分使用枚举(指数复杂度),另一部分使用多项式算法(如动态规划、贪心等)。通过调节分界点,让两个部分的计算成本大致相等,从而最小化总成本。
看例题就懂了,很简单。
例题
P4799 [CEOI 2015] 世界冰球锦标赛 (Day2)
先用 \(vector\) 把前半数列所有可能的 \(sum1\) 都存起来,\(dfs\) 后半时,对每一个 \(sum2\) 进行计算,找之前的 \(vector\) 中有多少个 \(sum1\) 满足 \(sum1+sum2\le m\),将 \(vector\) 提前排序后每次 \(upper\_bound\) 计算即可。

浙公网安备 33010602011771号