状态压缩dp
文章平均质量分 84
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
Comet OJ - Contest #11 F arewell(FWT + 状态压缩)
大致题意 做法 考虑到n的大小只有20,所以应该和状态压缩或者说集合按位表示有关。 因此,我们考虑用FSF_SFS表示考虑的点的状态为SSS的情况下,所有可能的DAGDAGDAG的方案数。 考虑每一个状态的转移,容斥一下可以得到如下转移方程: FS=∑T⊂S(−1)∣T∣−1FT2∣ET,S−T∣ F_S=\sum_{T \subset S}(-1)^{|T|-1}F_T2^{|E_{T,S...原创 2019-11-01 11:18:59 · 284 阅读 · 0 评论 -
CodeForces 1238E Keyboard Purchase(状态压缩dp)
大致题意:给你一个由最多m种字符构成的长度为L的字符串。定义两个相邻字符的代价之差是两个字符对应位置的绝对值,现在让你找到这m种字符的一种排列方式,使得总的代价之和最小,问最小代价是多少。 很神奇的一种状压姿势。 我们考虑最好的情况下肯定是让任意两个字符位置之差为1,但是实际上相邻的最多只有两个,不能所有的位置之差都为1。但是我们在做的时候,可以维护当前可以取的最小距离。初...原创 2019-10-09 11:07:47 · 742 阅读 · 0 评论 -
牛客国庆集训派对Day2 E 数据排序(状态压缩dp)
虽然说得分可以一样,但是我们还是可以仅仅只用两个状态0和1来表示这一题。 某一个位置为0表示当前这个数字还没有被标号,也即当前数字比所有的已经标号的数字都要小。如果为1,那么说明这个已经标号,并且这个数字与比它先标号的数字和与其相等的数字的冲突值已经计算过了。于是一个状态,我们可以用一个15为的二进制数字来表示。 令dp[i]表示当前的状态,那么当前状态就可以转移到后面的状...原创 2018-10-02 21:16:58 · 306 阅读 · 0 评论 -
牛客练习赛27 F 计数(状态压缩dp + 矩阵快速幂优化)
中文题。 由于m最大范围只有5,而且每一个位置只能够填写3和7,所以我们不妨考虑状压,用0和1分别表示3和7,这样就是一个5位的二进制数字。那么我们的限制条件也可以很好的通过位运算来判断。接着我们考虑这么多个位置如何计算方案数。首先,我们简化问题,把问题变成一条链而不是一个圈,这样一个位置可以放什么数字就只是与前面四个位置有关系。如果之前的7的个数已经大于3的个数,那么当前位置放...原创 2018-09-24 10:47:42 · 343 阅读 · 0 评论 -
HDU 6407 2018HDU多校赛 第八场 Pop the Balloons(状态压缩dp)
大致题意:给你一个m*n的表,其中为Q的位置表示为气球。每次,我扎破一个气球会导致与其相同行和列的气球一起爆炸。现在,询问给你扎1..k次,对于每个扎气球的次数i,问你有多少种方式使得可以把所有的气球扎破。 数据范围M和N一个是12一个是20,显然的一个状态压缩dp,但是这个状态却不是那么好表示。按照正常思路,由于m的范围更小,所以我用一个12位的数字表示每个行是...原创 2018-08-18 14:34:28 · 1018 阅读 · 0 评论 -
HDU 6321 2018HDU多校赛 第三场 Dynamic Graph Matching(状态压缩dp)
大致题意:一开始图是空的,总共有m个操作,每次可以添加或者删除一条边,每个操作结束后,输出这个图里面匹配数为1,2,...,n/2的方案数。看到n的范围是10,然后操作数是3W,就应该直接想到这是一个状压dp的……一开始还往组合数学,容斥原理方面去想……还好最后做出来了。首先,我们考虑加入一条边之后会产生多少贡献。显然是加入这条边之前,所有不包含这条边以及这两个点的匹配的数目。我们用dp[status][i]表示取的点的状态为status,然后构成i个匹配方案数。当加入边(x,y)之后,dp[status|原创 2018-07-31 10:25:10 · 251 阅读 · 0 评论 -
HDU 3247 Resource Archiver(AC自动机+状态压缩dp+最短路BFS)
大致题意:给你一些合法字符串,和一些不合法串,现在要求你构造一个字符串,使得这个字符串包含所有哦的合法串,且不包含任何不合法串,而且长度最短。 这里了涉及到一个长度最短,可能就和之前的一些题目不同。我们注意到这个数据范围,合法串只有最多10个,所以状态压缩dp很容易想到。这里是求字符最短长度,如果把长度看做代价,很容易发现,此题和状态压缩的鼻祖 HDU 4568 很像。这题是要求你在一个矩阵中取10个以内的东西,每次走一步,问你最少需要走多少步能够取完所有的东西。今天这题则是构造字符串,要求原创 2018-02-25 10:00:29 · 372 阅读 · 0 评论 -
HDU 4057 Rescue the Rabbit(AC自动机+状态压缩dp)
大致题意,还是类似,给你一些字符串,这些字符串有相应的权值,只要包含某个字符串就要加上这个权值。然后同样也是A、T、C和G四个DNA,再告诉你一个长度,问你这个长度的所有字符串中,权值和最大能够到达多少。 一开始的想法还是和之前类似,我们之前有记录单词结尾,我们现在在记录单词结尾的时候把单词的权值也给记上,然后转移的时候,转移最大值。有转移方程dp[i][j]=max(dp[i][j],dp[i-1][x]+val[x]),这个val[x]包含的不止一个单词的结尾的权值,因为单词有相互包含的原创 2018-02-21 12:02:40 · 281 阅读 · 0 评论 -
CodeForces 903F Clear The Matrix (状态压缩dp)
大致题意:给你一个4*N的矩阵,矩阵中只含有'*'和'.',然后每次你可以选择1*1、2*2、3*3、4*4的子矩阵,把子矩阵中每个位置都变成'.'。对应每一个尺寸的矩阵会有一个权值,然后问你把整个矩阵变成'.'最少需要多少代价。 典型的状态压缩dp。经过分析可以发现,某一个状态与下一个状态的关系,只与后面的4*4的矩阵有关系,所以我们不妨用这个表示状态。dp[i][status]表示前面i列已经全部是'.',然后后面4*4的矩阵是status情况的时候的最少代价,0表示是'*',1表示是'原创 2017-12-28 21:25:01 · 700 阅读 · 0 评论 -
HDU 4336 Card Collector(状态压缩dp+概率dp)
Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4693 Accepted Submission(s): 2380Special Judge Problem Description In your...原创 2017-10-12 19:13:13 · 371 阅读 · 0 评论 -
HDU 5965 扫雷(dp/状态压缩dp)
中文题。 有个3*N的地图,告诉你第二行的情况,问你有多少种情况放地雷。 自己自始至终的想法:状态压缩。由于任意一个第二行格子的情况只与前一个的格子控制范围的后四个有关,所以我么可以用一个4位的二进制数来表示某个位置是否放了地雷。定义dp[i][j]表示处理到第i列,且第i列所控制的后四个格子的状态是j的时候的方案数。那么就可以很自然的得到状态转移方程:dp[i][j]=Σdp[i-1][x],其中这个x表示上一个可以合法转移的状态。这里关于这个状态的枚举,我们可以枚举上一个原创 2017-10-05 18:49:27 · 409 阅读 · 0 评论 -
HDU 6006 Engineer Assignment(状态压缩dp)
看到数据范围这么的小,想了想搜索还是差了一点,于是就只能是状压了…… 大致题意是,有n个项目,每个项目都涉及到一些领域,然后有m个专家,每个专家也都精通一些领域。规定每个专家只能参与一个项目,可以在一个项目中负责多个领域,然后每个项目一定得保证所有的领域至少都有一个人精通才能完成。问最后最多能够完成多少个项目。 我们发现专家总共只有10个,然后项目也最多只有10个,所以我们可以定义dp[i][s]表示对于前i个项目,我选用专家的状态为s的时候最多能够完成的项目个数。这里s是一原创 2017-10-07 23:35:47 · 435 阅读 · 0 评论 -
POJ 1185 炮兵阵地(状态压缩dp)
dp好难啊~~ 第一次一天的进度这么慢……dp果然学得很不好…… 这题的话还是很明显的状态压缩dp的,因为改好总共最多只有10列,故每一行只需要用一个10位的二进制数字表示是否放了炮兵即可。但是此题的关键不是这个,此题炮兵的打击范围是两格,这就意味者,第i行的状态与第i-1行和第i-2行都有关。如此一来,按照正常的dp方式,转移方程为:dp[i][j][k]=max(dp[i-1][k][l])+p[j]。其中dp[i][j][k]表示第i行状态j且第i-1行状态为k时的炮兵原创 2017-07-22 22:48:18 · 291 阅读 · 0 评论 -
CSU 1964 Problem_hc(状态压缩dp)
聪神出的题,但这也太直接了吧…… 2017年最后一次湖南多校赛,本来不想打的,发现有一道原题,就直接交了,然后开打,最后拿了第二O(∩_∩)O…… 这题,其实比赛的时候也想到了应该是状压dp但是,留到最后只有20分钟,干脆就吃饭去了……现在看来其实也不是很难,前面的一道模拟题写的慢了点,还是有点可惜。 这题给出n个人的胜负关系,然后要求第一个人和第二个人不能分在同一个半场,要你计算最后一个人获胜的方案数。这题数据范围比较小,最大也才16,可以知道是状态压缩dp原创 2017-07-26 13:20:17 · 405 阅读 · 0 评论