【trick】meet in the middle

meet in the middle

折半搜索思想。

CF525E Anya and Cubes

每个数组有三种情况:被选,被选且贴了标签,没被选

两边状态没有重复的。

折半搜索即可。

时间复杂度 O ( n ∗ 2 n ) O(n*\sqrt{2}^n) O(n2 n)

Vertex Covers

  • 选择模型

  • 点覆盖也是选一个点或者不选,所以归类为选择模型

  • 把这个图分成两半L和R,对每一半都搜索出点覆盖的方案数,然后合并

  • 问题:有可能横跨L和R的边没有点覆盖,需要别的更大的集合覆盖。

  • 枚举L的选择情况,对于左边没选中的那些点,若它连接的其他左边点有没被选中的,就舍去该情况。

  • 所以剩下的情况连接的其他左边点都被选中了,即L的选择情况是L的点覆盖。

  • 然后求出左边没选中的那些点连接的右边那些点,即是右边的必选点,那么右边就可以选该必选点集或其超集。

  • 时间复杂度 O ( n ∗ 2 n ) O(n*\sqrt{2}^n) O(n2 n)

考虑到不可能有空集,所以直接输出 ∑ c o s t l s u m r \sum{cost_lsum_r} costlsumr 即可。

posted @ 2021-05-01 10:28  仰望星空的蚂蚁  阅读(12)  评论(0)    收藏  举报  来源