
状压dp
文章平均质量分 69
Frozen_Guardian
已退役菜鸡Acmer
展开
-
2020ICPC沈阳 - United in Stormwind(推公式+FWT+SOSdp)
题目链接:点击查看题目大意:规定一张试卷上有 mmm 个问题,每个问题只有 A,BA,BA,B 两个选项,现在给出 nnn 张试卷。需要选择一个问题的子集,使得有大于等于 kkk 对试卷的答案是不完全相同的,问这样的子集有多少个题目分析:若将选项转换为 000 或 111,试卷视为 010101 串,那么两个试卷相同,当且仅当异或和等于 000。设 aia_iai 为第 iii 个试卷所代表的 010101 串, F(S)F(S)F(S) 为异或和等于 SSS 的 010101 串对的个数,则F(原创 2021-08-20 20:00:00 · 4350 阅读 · 1 评论 -
CodeForces - 1550E Stringforces(二分+状压dp)
题目链接:点击查看题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个。设 f[i]f[i]f[i] 为第 iii 个字母在字符串中,最长的连续子段的长度,现在要求所有 f[i]f[i]f[i] 中最小值的最大值题目分析:读完题一下子根据复杂度把正解分析出来了,可是怎么也没办法往 dpdpdp 上去靠。因为 k≤17k\le 17k≤17,又因为 217≈2e52^{17}≈2e5217≈2e5,所以不难想到二原创 2021-07-15 12:01:23 · 494 阅读 · 0 评论 -
CodeForces - 165E Compatible Numbers(SOSdp)
题目链接:点击查看题目大意:给出 nnn 个数,问能否在数列中找到一个数,满足 ai&aj=0a_i\& a_j=0ai&aj=0题目分析:题目中的式子可以转换为,aia_iai 是 aja_jaj 补集的子集,然后就是 SOSdpSOSdpSOSdp 的模板题了,因为输出的答案涉及到了 −1-1−1,所以可以将 dpdpdp 初始化为 −1-1−1,然后直接维护每个超集的最大可行答案就好啦转移的话就是子集向超集转移代码:// Problem: E. Compati原创 2021-06-08 18:26:42 · 279 阅读 · 0 评论 -
AtCoder - arc100_c Or Plus Max(SOSdp)
题目链接:点击查看题目大意:给出 2n2^n2n 个数,编号从 000 开始,现在要求出对于每个 k∈[0,2n)k\in[0,2^n)k∈[0,2n),找到两个下标 (i,j)(i,j)(i,j),满足 i⊕j<=ki \oplus j<=ki⊕j<=k,且 ai+aja_i+a_jai+aj 最大题目分析:读完题后感觉很乱,因为绕了很多次,分析之后需要发现,i⊕j<=ki \oplus j<=ki⊕j<=k 这个条件,可以表示为 i⊕ji \oplus ji⊕原创 2021-06-08 18:04:54 · 244 阅读 · 0 评论 -
CodeForces - 1208F Bits And Pieces(SOSdp+贪心)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列,求出贡献最大的三元对:(i,j,k)(i,j,k)(i,j,k),满足 i<j<ki<j<ki<j<k,其贡献为 ai∣(aj&ak)a_i|(a_j\&a_k)ai∣(aj&ak)题目分析:因为 aja_jaj 和 aka_kak 被绑定了,所以我们可以直接枚举 aia_iai 贪心从高位去寻找是否存在后面 aj&aka_j\&a_kaj&ak原创 2021-06-08 15:40:15 · 257 阅读 · 0 评论 -
CodeForces - 1523D Love-Hate(随机数+状压dp)
题目链接:点击查看题目大意:给出 nnn 个 010101 序列表示二进制状态,问选择至少 ⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n⌉ 个状态进行位运算的与运算后得到的答案中,111 的位数最多的答案题目分析:考虑最后需要求得的答案,一定是 ⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n⌉ 个状态中,其中一个状态的子集,于是我们就可以去枚举然后统计答案考虑随机数,每随机抽一个状态,不在最后 ⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n⌉ 个原创 2021-06-01 20:42:40 · 405 阅读 · 0 评论 -
CodeForces - 1102F Elongated Matrix(哈密顿路径+状压dp)
题目链接:点击查看题目大意:给出一个 n∗mn * mn∗m 的数字矩阵,现在可以对 行 进行重新排列,现在对排列后的矩阵按列展开成线性:s1,s2,…,snm=maze1,1,maze2,1,...mazen,1,maze2,1,...,mazen,ms_1, s_2, \dots, s_{nm}=maze_{1,1},maze_{2,1},...maze_{n,1},maze_{2,1},...,maze_{n,m}s1,s2,…,snm=maze1,1,maze2,1,...mazen,1原创 2020-12-16 22:02:53 · 316 阅读 · 1 评论 -
中石油训练赛 - Watch Later(状压dp)
题目链接:点击查看题目大意:给出一个长度为 n 的字符串,字符串中共有 k 种不同的字符,现在问删除掉所有字符的最小操作数,对于每种字符需要确定一个先后顺序,每次需要删除掉当前所有的这种字符才能去删除下一种字符,而对于每一种字符的删除,一段当前字符组成的连续区间可以一起删除,现在问最小操作数,注意一下,当某段字符被删除后,剩下的字符会进行拼接题目分析:训练时读错题了,以为是青蛙祖玛那样的删除,然后看 n 那么小,觉得像是区间dp,就没再纠结了(这个样例给的也太水了吧,开局两分钟以为是签到题,冲...原创 2020-09-12 00:05:02 · 516 阅读 · 2 评论 -
牛客 - Dress as women(sg定理+位运算)
题目链接:点击查看题目大意:两个人正在玩游戏,现在给出 n 个点,两个人轮流操作,每次可以选择任意个贡献的顶点然后删除,最后无法操作的人失败题目分析:读完题后想到了之前做过的一道题目:点击查看因为 n 比较小,不难想到状态压缩,所以最朴素的做法就是设 m = 2^n ,直接 m * m 枚举状态然后写 dfs 转移状态就好了,在此之前需要记得预处理一下共线的限制,共线限制也可以利用状态压缩来保存,只需要判断每个二进制状态中所有为 1 的位置是否共线即可,在处理共线限制时,因为时间复杂度计算的比较原创 2020-06-17 01:54:56 · 290 阅读 · 0 评论 -
牛客 - 膜法记录(状压dp预处理)
题目链接:点击查看题目大意:给出一个 n * m 的矩阵,其中存在着些许敌人,现在可以进行 a 次行攻击,以及 b 次列攻击,顾名思义,每次行攻击可以消灭一整行的敌人,每次列攻击可以消灭一整列的敌人,现在问能否通过合适的搭配,使得敌人全部消灭题目分析:因为 n 最大只有20,所以考虑状态压缩预处理,对于每一列来说,所有敌人的位置肯定都有一个状态 state ,维护一下 dp[ i ] 表示...原创 2020-03-24 23:17:25 · 391 阅读 · 0 评论 -
CodeForces - 1316E Team Building(状压dp)
题目链接:点击查看题目大意:给出 n 个人,现在需要 p 个球员和 k 个啦啦队员,n 个人当啦啦队员以及当第 i 个位置的球员所做的贡献都会给出,现在问如何分配可以使得总贡献和最大题目分析:因为 p 最大只有 7 ,不难想到状态压缩,而压缩的每个状态可以表示球员每个位置的占有情况,对于啦啦队员,我们可以贪心排序,从最大的进行遍历,dp[ i ][ j ] 代表到了第 i 个人为止,状态为...原创 2020-03-05 21:09:23 · 571 阅读 · 0 评论 -
牛客 - 收集纸片(最短哈密顿路径-状压dp)
题目链接:点击查看题目大意:给出一个 n * m 的二维平面,其中有 k 个纸片,给出第一个纸片的位置,要求从第一个纸片出发,经过每个纸片一次后再回到第一个纸片的位置,输出最短路径题目分析:最短哈密顿路径的模板题,比赛的时候为什么没看出来呢。。好像是被 n * m 很小所迷惑了,感觉像是一道搜索题,但想了半天没什么思路就不想做了,赛后回顾一下的时候发现,k 给的特别小,最大只有 11 ,而...原创 2020-02-23 00:39:42 · 387 阅读 · 0 评论 -
HDU - 3341 Lost's revenge(AC自动机+状压dp)
题目链接:点击查看题目大意:给出 n 个模式串,最后给出一个匹配串,问如何重新排列匹配串,可以使得匹配串尽可能多的匹配模式串题目分析:因为是模式串和匹配串的匹配,所以考虑AC自动机,因为数据范围比较小,且是求最优解,所以考虑dp,因为匹配串的长度最多只有40,而不同的字符只有 4 种,所以可以开个五维dp转移状态,dp[ A ][ B ][ C ][ D ][ state ] 表示当四种字...原创 2020-02-20 23:35:12 · 278 阅读 · 0 评论 -
HDU - 2825 Wireless Password(AC自动机+状压dp)
题目链接:点击查看题目大意:给出 m 个匹配串,问长度为 n 的字符串中,至少包含 k 个匹配串(可重叠)的字符串有多少个题目分析:考虑到n,m,k都特别小,所以可以先用AC自动机将状态关系转移出来,然后配合状压dp进行状态转移,时间复杂度为n * L * 2^k ,其中 L 为匹配串的总长度,也就是AC自动机的节点个数代码:#include<iostream>#i...原创 2020-02-09 13:55:51 · 249 阅读 · 0 评论 -
HDU - 3538 A sample Hamilton path(最短哈密顿路径+状压dp)
题目链接:点击查看题目大意:求从0开始的最短哈密顿路径,并且要求了某些点的先后顺序题目分析:哈密顿路径:由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次(百度百科)既然按照一定的次序求最短路,可以模仿floyd求最短路的思想,然后套用状态压缩的模板来做,在状态压缩的过程中,1表示该点已经走过,0表示该点还未走过,dp[i][j]代表状态i到终点j的最短距离,那么初始化就是d...原创 2019-08-15 21:19:50 · 481 阅读 · 2 评论 -
ZOJ - 3777 Problem Arrangement(状压dp)
题目链接:点击查看题目大意:给出n道题,以及不同题目不同时间的兴趣值,p[i][j]代表的是第j道题放在第i个位置做的时候可以得到的兴趣值,问有多少种排列组合的方式能让最后做完所有题目的兴趣值大于等于m题目分析:因为涉及到先后顺序问题,所以用状态压缩更容易实现枚举和状态转移,所以这个题要用状态压缩来解决。dp[i][j]代表的是状态为i时兴趣值为j的方案数,那么我们最后只需要判断一下dp[...原创 2019-08-16 20:05:30 · 216 阅读 · 0 评论 -
POJ - 2411 Mondriaan's Dream(状压dp)
题目链接:点击查看题目大意:铺瓷砖题目分析:经典之经典的状态压缩动态规划,具体的懒得说了,怠惰ing。。一个月之前写的代码,还好当时注释做的好,现在稍微一看就能立马理解,码到博客上存着吧,三种方法,一种很巧妙很好写但我至今不知道原理的大牛方法,一种很慢但很好理解的暴力枚举法,还有一种效率很高不太容易写的搜索方法,都挂上吧:暴力枚举:#include<iostream>...原创 2019-08-16 20:20:29 · 316 阅读 · 0 评论 -
POJ - 3254 Corn Fields(状压dp)
题目链接:点击查看题目大意:给出一个n*m的地图,有些位置不能放牧,然后放牧的条件是相邻两个格子不允许同时使用,问可行方案有几种题目分析:因为给出的数据范围很小,并且放牧的状态是放或者不放,很容易用状态0或1来表示,由此会往状态压缩方面去思考,这是一个很中规中矩的状压dp,给出一个矩形然后从第一行开始向下转移状态,和铺瓷砖那个题目的大体思路是一致的,都是先对第一行进行特判,然后枚举第一行,...原创 2019-08-16 21:10:56 · 260 阅读 · 0 评论 -
HDU - 4856 Tunnels(哈密顿路径+状压dp)
题目链接:点击查看题目大意:给出一个n*n的正方形网格,其中“.”表示可以走的路,“#”表示障碍物,每次可以向上下左右任意方向走1格,花费1单位时间,再给出m条单向隧道,从隧道的起点进入后可以瞬间从隧道的终点出来,即不花费时间,但是每条隧道只能走一次,现在可以选择网格中的任何一点作为起点,问在满足条件并走完全部隧道的情况下的最小时间题目分析:首先是关于起点选择的问题,用贪心的思想来考虑,肯...原创 2019-08-17 11:49:26 · 310 阅读 · 0 评论 -
FZU - 2218 Simple String Problem(状压dp)
题目链接:点击查看题目大意:给出一个长度为n,含有k个不同字母的字符串,我们的任务是从中挑选出两段连续的子串,要求其长度的乘积最大,还有一个限制条件是,这两个子串不能互相包含相同的字母题目分析:因为k给的特别小,我们可以用状态压缩来解决,可是,我太弱了,根本没思路,还是借鉴的大佬的思路,用异或运算来实现状态转移,具体的看代码吧,这是这两天以来写过的最短的代码了。。#include&l...原创 2019-08-17 17:44:23 · 220 阅读 · 0 评论 -
POJ - 1185 炮兵阵地(状压dp)
题目链接:点击查看题目大意:中文题,题意很清晰,不多赘述题目分析:最基础的状压dp,需要考虑如何转移,因为每一个炸弹所涉及的范围都是上下左右两个格子,我们可以从第一行开始向下转移,这样某一行的状态就取决于前一行和前两行,所以我们的dp数组设置为3维即可,dp[i][j][k]代表的含义是第i行,当前行状态为j,前一行的状态为k时的最优解,这样我们最后在第n-1中寻找最大值即可。接下来我...原创 2019-08-14 18:02:06 · 257 阅读 · 0 评论