题意是:给你一个二分图,让你在其中选一些边,边和边两边的点构成一个新图,然后问新图的最小代价?
新图要满足两个条件:右边的点必须全选,左边的点必须满足互斥关系。
原图也满足一些性质,每个点的度小于3,左边的每个点不会向左边编号比它小的点连边。
为什么爆搜能过,为什么爆搜能过,为什么爆搜能过。。。。。。
而且还比我快。
爆搜就是加个剪枝,如果当前的sum比ans大就不继续往下搜了。。。。不会证复杂度。
然后我写的大概是一个折半dp预处理的做法,慢了十倍左右
就是首先不加剪枝的爆搜一定会tle嘛,然后就考虑折半的复杂度,因为他保证每个点不会连向比它小的点,然后我们爆搜左边前一半的点,这样右边前一半的点一定会都被选到,然后dp记录所有的状态,dp[sl][sr]表示左边上一半状态为sl的时候,右边下半部分为加入了sr的时候最小花费。
因为每个点最多向右连3条边,一共27条边嘛,然后又有右边每个点最多连一条边(显然),右边前一半的点一定会被选到的限制,爆搜复杂度肯定是ok的嘛,具体没算。
然后爆搜左边下半部分的点,这样确定的右边的状态是这次的状态 sr^(1<<(n)-1)^(1<<(n/2)-1),就是所有点减去这次搜的点。然后确定左边的状态,考虑这次的转态sl会有一个互斥的状态ban,那么合法的状态就是 ~ban的子集。
只有把第一次的dp再子集dp一下,就可以o(1)得到了。这个高位前缀和直接子集dp复杂度都是可以的,分别是2^n*(n/2)和2^(n/2)*3^(n/2)的。
附一下代码: