meet in the middle
折半搜索思想。
CF525E Anya and Cubes
每个数组有三种情况:被选,被选且贴了标签,没被选
两边状态没有重复的。
折半搜索即可。
时间复杂度 O ( n ∗ 2 n ) O(n*\sqrt{2}^n) O(n∗2n)
Vertex Covers
-
选择模型
-
点覆盖也是选一个点或者不选,所以归类为选择模型
-
把这个图分成两半L和R,对每一半都搜索出点覆盖的方案数,然后合并
-
问题:有可能横跨L和R的边没有点覆盖,需要别的更大的集合覆盖。
-
枚举L的选择情况,对于左边没选中的那些点,若它连接的其他左边点有没被选中的,就舍去该情况。
-
所以剩下的情况连接的其他左边点都被选中了,即L的选择情况是L的点覆盖。
-
然后求出左边没选中的那些点连接的右边那些点,即是右边的必选点,那么右边就可以选该必选点集或其超集。
-
时间复杂度 O ( n ∗ 2 n ) O(n*\sqrt{2}^n) O(n∗2n)
考虑到不可能有空集,所以直接输出 ∑ c o s t l s u m r \sum{cost_lsum_r} ∑costlsumr 即可。