![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
状压dp
zzk_233
这个作者很懒,什么都没留下…
展开
-
HDU 5713 状压dp
题目大意:给出n个点和m条边,求出图中恰好有k个连通图的方案数。首先我们求出每个选择状态的连边方案数num,为了使枚举时不重复,每次去掉最后一位lowbit( i ),只用包含这个点的连边情况转移。然后求出保证这个状态只有1个联通块的方案数f,枚举所有状态利用去掉最后一位lowbit( i )之后的状态s,枚举s的子集j,i^j就代表了原状态i中不含j状态的情况,剩余的j状态的...原创 2018-08-18 20:33:16 · 172 阅读 · 0 评论 -
CF 449D 题解(状压dp+容斥原理)
题目大意:给定一个序列,选择其中的一部分数,他们相互&的和为0。f[i]数组表示有多少个数相互&结果都是i,就是这个数i是多少个数的子集可以先枚举每位,再枚举每个数字,如果这个数字当前位为1,那么当前位的值可以作为删去这个位的值。这样按位数枚举,每个位都由前一个位推过,不会重复,而且枚举位数和每个数保证了完全性。求出f之后,dp[i]表示大于等于i个1的数的个数...原创 2018-08-17 19:11:11 · 352 阅读 · 0 评论 -
hdu 6125 (状压dp+分组背包)
这道题思维很奇特。。。题目大意:从给出的n个数中选出至少一个,至多k个,保证这些数的乘积没有一个因数是完全平方数。也就是说没有一个质因数出现超过1次。n和k小于等于500。那么因为根号500以内的质因数只有8个,很容易想到状压,把每个数的质因数按照是否出现压成一个二进制数,如果出现多次,这个数就不可用了之后枚举每个数,枚举每个状态,可以从当前状态向下转移当且仅当当前状态和枚举的...原创 2018-08-17 15:21:20 · 216 阅读 · 0 评论 -
CF494B Obsessive String 题解(KMP/HASH+DP)
先说明一下本题的题意,因为题目太难读了。。。题目大意:给出两个字符串,求有多少个字符串,包含二串,且为一串的子串,而且互相不重叠,解释一下样例。一串:ddd二串:d这里将一串的ddd分别标号为123答案为:1 , 2, 3, 12 3 ,1 23 , 123 ,1 2,2 3,1 3 ,12 ,23 ,1 2 3。看到这应该有一些思路了吧,这道...原创 2018-08-16 11:20:42 · 322 阅读 · 0 评论 -
bzoj 3055 礼物运送
首先处理出两点之间最短路,设状态f[i][j]表示j状态下结尾为i的最短路,所以有转移f[i][j]=f[k][j|(1<<(k-1))]+dis[i][k];初状态就是f[i][(1<<(i-1))]=dis[1][i],因为忽略了第一个点,在枚举的时候后面的点都要为i-2,具体看代码。#include<cstdio>#include<cma...原创 2018-11-06 10:07:21 · 163 阅读 · 0 评论