状压dp
Neo__Z
这个作者很懒,什么都没留下…
展开
-
NOIP2016 T6 愤怒的小鸟
解题报告:仔细思考可以发现,这个题目应该是可以状压DP的。 (又是dp ,今年考了两道dp,还都是新类型)f[s]表示被覆盖的状态为s的最少猪数,然后预处理一个g[i][j]表示选择了i和j之后的抛物线经过的猪的状态集合(是一个01状态),如g[3][5]=(21)10=(10101)2(21)_{10}=(10101)_2表示经过第3、5只猪的抛物线可以打到第第1,3,5只猪。容易得出: f原创 2017-07-29 11:22:24 · 485 阅读 · 0 评论 -
bzoj5336: [TJOI2018]party【状压dp】
Description小豆参加了NOI的游园会,会场上每完成一个项目就会获得一个奖章,奖章 只会是N, O, I的字样。在会场上他收集到了K个奖章组成的串。 兑奖规则是奖章串和兑奖串的最长公共子序列长度为小豆最后奖励的等级。 现在已知兑奖串长度为N,并且在兑奖串上不会出现连续三个奖章为NOI,即奖章中不会出现子串NOI。 现在小豆想知道各个奖励等级会对应多少个不同的合法兑奖串。...原创 2018-05-21 15:00:24 · 541 阅读 · 0 评论 -
Codeforces908H. New Year and Boolean Bridges【并查集+强联通+FWT】
题目大意:有一个n个点的有向图。 定义i能到达j时f(i,j)=1,否则f(i,j)=0。 对于每个点对(i,j),给定以下三个条件中的某一个为真: (1) f(i,j) and f(j,i)=1; (2) f(i,j) or f(j,i)=1; (3) f(i,j) xor f(j,i)=1。 求满足条件时的最小边数。 1<=n<=47。解题思路:等价于满足...原创 2018-05-18 18:35:01 · 394 阅读 · 0 评论 -
bzoj5299 [Cqoi2018]解锁屏幕【状压dp】
传送门解题思路:状压dp。设f[i][s]f[i][s]f[i][s]表示当前在iii,经过状态为sss的方案数,在预处理g[i][j]g[i][j]g[i][j]为iii到jjj路径上的点即可。时间复杂度为O(n22n)O(n22n)O(n^22^n)#include<bits/stdc++.h>#define ll long longusing namesp...原创 2018-05-04 15:56:09 · 289 阅读 · 0 评论 -
BJ模拟 排列【状压dp+矩阵快速幂】
题目大意:求长度为nnn,且满足对于任意i,|pi−i|≤ki,|pi−i|≤ki,|p_i-i|\le k的排列数。n≤1e9,k≤5n≤1e9,k≤5n\le 1e9,k\le 5解题思路:由于kkk很小,很容易想到记录一个2k+12k+12k+1位的状态表示当前位还有那些位置可以用,再用矩阵快速幂优化,但还是会TLE。注意到我们每一步转移恰好增加一个占用,至多减少一个占用,所...原创 2018-05-02 09:03:12 · 220 阅读 · 0 评论 -
Uestc1291 上天的卿学姐【状压dp】
Description众所周知,卿学姐十分擅长数据结构。一天卿学姐开始研究起二维偏序的问题,卿学姐三下五除二就写了个树状数组解决了。于是卿学姐开始做三维的问题,搞了个树套树也是过了。欲求不满的卿学姐直接开始搞五维的偏序,仔细思索之后,卿学姐研究出一种用分块加bitset的做法。峰回路转,沈宝宝问感觉自己要上天的卿学姐16维偏序怎么做,卿学姐现在还在研究六维偏序,不得不将这个问题...原创 2018-03-11 19:56:02 · 333 阅读 · 0 评论 -
BJ模拟 装饰地板【状压dp+特征多项式优化矩阵快速幂】
题目大意:给一个m∗nm∗nm*n的地板,有s1s1s1种1×21×21\times2的横地砖,s2s2s2种2×12×12\times 1的竖地砖,问有多少种铺满的方式,对998244353取模。 (m≤6,n≤102501,s1,s2≤1e9)(m≤6,n≤102501,s1,s2≤1e9)(m\le 6,n\le 10^{2501},s1,s2\le 1e9)解题思路:看到...原创 2018-03-15 20:18:22 · 325 阅读 · 0 评论 -
bzoj4006 管道连接【斯坦纳树+子集dp】
解题思路:题目要求的即为最小斯坦纳森林。 我们可以枚举颜色种类的一个子集S,把颜色属于S的关键点提出来求一次最小斯坦纳树,设最小值为g[S],那么最后子集dp一波:g[S]=min(g[S],g[i]+g[S^i])(i∈\inS)。求最小斯坦纳树的方法源于状压dp: 设f[i][s]表示以i为根的子树中关键点联通状态为s的边权和最小值,那么转移方程有两种,分别为: f[i][s]=min(f原创 2017-12-26 20:50:38 · 317 阅读 · 0 评论 -
bzoj1076 奖励关【期望+状压dp】
解题思路:若正着推,则一个状态会转移到两个状态,但我们不知道那一种更优,所以倒着推从两个状态转移到一个状态。设f[i][j]f[i][j]表示从第i轮j这个状态开始可以得到的最高分,那么初始状态为f[k+1][j]=0f[k+1][j]=0,我们要求的答案为f[1][0]f[1][0],转移方程如下:如果当前可以去第l个,则: f[i][s]+=max(f[i+1][s],f[i+1][s|(1<原创 2017-12-31 20:46:37 · 238 阅读 · 0 评论 -
51nod1673 树有几多愁 【虚树+树形dp+状压dp】
题目描述lyk有一棵树,它想给这棵树重标号。 重标号后,这棵树的所有叶子节点的值为它到根的路径上的编号最小的点的编号。 这棵树的烦恼值为所有叶子节点的值的乘积。 lyk想让这棵树的烦恼值最大,你只需输出最大烦恼值对1e9+7取模后的值就可以了。 注意一开始1号节点为根,重标号后这个节点仍然为根。数据保证叶子节点个数<=20。例如样例中,将1,2,3,4,5重标号为4,3,1,5,2,此时原来原创 2017-10-22 21:00:16 · 528 阅读 · 0 评论 -
NOIP模拟 乘积【状压dp+多组背包】
题目大意:选择不超过k个n以内的正整数相乘,使乘积使一个无平方因子数,问有多少中取法?(每个数只能取一次)1≤k,n≤5001\le k,n\le 500。解题思路:首先可以想到把不合法的数删了。那问题也就变成了使取得的数的质因数集合无交集。如果质因数个数足够少,我们就可以状压记录每个质数取还是没取,但500的范围太大。不过注意到每个数最多只会有一个比n√\sqrt{n}大的质因数,所以我们可以把所原创 2017-10-24 18:52:29 · 305 阅读 · 0 评论 -
JZOI 3521 道路覆盖 二分答案+状压dp
解题报告:二分+DP 由于是求最小值中的最大值,所以二分答案ans,问题转化为了判定性问题。判定的方法是:每个位置都能到达高度ans的最小费用cost是否<=M。 注意到1<=K<=11,也就是说对于第i个路段,能够提高它高度的泥土只有从第i-K个到第i个。于是使用状态压缩动态规划求cost。f[i][j]表示前i个路段通过泥土使用>=高度ans,且第i - k个到第i个的使用情况为二进制数j的原创 2017-07-29 20:35:56 · 931 阅读 · 0 评论 -
poj1185 NOI2001 炮兵阵地【状压dp】
解题思路:注意到任意一行的布置只与该行及上两行的布置有关,且分析一个列为10(m的最大值)的表,发现一个全为P的空列上一共也只有60种合法的放置方法,所以可以从上往下进行扫描,用二进制枚举当前这一行的状态,用1024*1024的数组表示前两行的放置状态,在都合法的情况下进行转移到另一个表示当前行与上一行的数组即可(考虑滚动数组)。但由于第一行要特殊处理(i-2是负数会数组越界),所以可以改为从下往上原创 2017-10-21 14:25:50 · 237 阅读 · 0 评论 -
hdu1074 Doing Homework 【状压dp】
解题思路:就一个状态而言,我们需要知道所有作业是做了还是没做,再看看n≤\le15,所以可以用状压dp。用数字i的二进制表示每项作业做了还是没做。 定义dp[i]有三个域:mi,t,pre,分别表示i状态下最小扣分,对应的时间,和是从哪个状态转移来的(因为要输出方案)。 则dp[i].t=dp[j]+work[k].c,dp[i].mi=min(dp[j].mi+(dp[i].t-work[k]原创 2017-10-12 14:43:15 · 188 阅读 · 0 评论 -
loj#2540. 「PKUWC 2018」随机算法【概率dp+状压dp】
传送门解题思路:朴素的dp是O(n3n)O(n3n)O(n3^n),即每个点有三种状态:没考虑过,考虑了且在独立集中,考虑了但没在独立集中,需要优化。设 f[i][s]f[i][s]f[i][s] 表示考虑前 iii 个点,独立集为 sss 的方案数,主要的问题就在于对于一个当前轮不能加入独立集的点,是否在之前就被考虑过,但注意到考虑了但没在独立集中的点数我们是知道的,即i−bin[s...原创 2018-05-29 10:23:43 · 548 阅读 · 0 评论