折半搜索 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\) 计算即可。

P5691 [NOI2001] 方程的解数

P3067 [USACO12OPEN] Balanced Cow Subsets G

P8817 [CSP-S 2022] 假期计划

posted @ 2025-11-18 21:52  Sqqqz185  阅读(20)  评论(0)    收藏  举报