随笔分类 -  算法->DP->状压DP

摘要:ARC105 来了,老年选手感到自己水平有一点差劲 A - Fourtune Cookies 题意:给四块饼干问能不能分成总和相同的两份 二进制枚举就行 #include <bits/stdc++.h> #define fi first #define se second //#define ivo 阅读全文
posted @ 2020-10-14 22:53 sigongzi 阅读(663) 评论(1) 推荐(0)
摘要:LOJ 3042. 「ZJOI2019」麻将 如何判定一个集合牌有没有胡的子集是不是胡的 就用一个$dp[j][k][0/1]$表示有j个连续两个的串,有k个连续1个串,有没有对子,再记一下这个集合里的牌大于等于2的花色数有几个 我们把$dp[j][k][0/1]$和大于等于2的花色数作为一副牌的状 阅读全文
posted @ 2019-06-01 14:06 sigongzi 阅读(513) 评论(0) 推荐(0)
摘要:题解 神仙的状压啊QAQ 设一个$f[S]$表示数字的集合为$S$时$sum[S]$为前缀最大值的方案数 $g[S]$表示数字集合为$S$时所有前缀和都小于等于0的方案数 答案就是$sum_{S} sum[S] f[S] g[2^{N} 1 S]$ 求$f$每次相当于往前面插入一个数,如果$sum[ 阅读全文
posted @ 2018-12-14 16:54 sigongzi 阅读(575) 评论(0) 推荐(0)
摘要:题解 什么破题,看一眼就能想出来$n^2 2^n$看了一眼数据范围有点虚,结果跑得飞快= = 处理出$a[i][j]$表示从$i$到$j$经过的点的点集 然后$f[i][S]$表示最后一个点在$i$处,经过的点集为$S$,方案数是多少 然后枚举一个不在$S$中的点$j$看看$a[i][j]$是否全部 阅读全文
posted @ 2018-12-08 22:20 sigongzi 阅读(340) 评论(0) 推荐(0)
摘要:题解 随机跳题真好玩 这个就是考虑我们怎么判断点在多边形内,就是点做一条射线,穿过了奇数条边 我们只需要记录一个二进制状态表示每个点的射线穿过路径的次数的奇偶性 枚举起点,然后用BFS的方式更新dp状态 代码 cpp include define fi first define se second 阅读全文
posted @ 2018-10-30 18:16 sigongzi 阅读(265) 评论(0) 推荐(0)
摘要:题解 根据一番认真严肃的猜结论和打表证明之后 我们可以得到 $f[i] = (\sum_{a[i] \& a[j] == a[j]} f[j]) + 1$ 统计所有的$f[i] 1$ 然后对于这道题,我们可以从值域上直接做 就是$g[a]$表示$a$作为结尾的数的序列有多少个 每次从$a$转移到$a 阅读全文
posted @ 2018-10-18 16:29 sigongzi 阅读(248) 评论(0) 推荐(0)
摘要:题解 记录一个数组dp[i][S][k]表示第i个点,它上面所有的点的状态(参军或者后勤)可以用状态S来表示,一共有k个平民参军的最大收益,当然数组开不下,可以用vector动态开 我们对于每个平民枚举它上面所有贵族的状态来计算如果对于这个平民,上面所有贵族状态为S的时候,收益是多少 然后对于每个贵 阅读全文
posted @ 2018-09-10 19:07 sigongzi 阅读(195) 评论(0) 推荐(0)
摘要:题解 先用kmp求出来一个ed[i][j]表示在母串的第i位是第j个子串的结尾 考虑状压一个二进制位表示这个子串覆盖过没有 对于最大值,记一个dp[S][i]表示子串的使用状况为S,当前为母串的第i位,最大覆盖的个数 每次枚举S一个没有的子串j,把目标状态记成S^(1 include include 阅读全文
posted @ 2018-09-04 15:46 sigongzi 阅读(300) 评论(0) 推荐(0)
摘要:题解 压的状态是一个二进制位,我们规定1到n的数字互不相同是从小到大,二进制位记录的是每一位和后一个数是否相等,第n位记录第n个数和原串是否相等,处理出50个转移矩阵然后相乘,再快速幂即可 代码 cpp include define enter putchar('\n') define space 阅读全文
posted @ 2018-08-27 16:51 sigongzi 阅读(258) 评论(0) 推荐(0)
摘要:题解 dp[i][j][S]表示区间[i,j]内剩余的数位状压后为S的最大值 这样转移起来不就是$n^3 2^8$了吗 冷静一下,我们可以发现一段区间内剩下的数位的个数是一定的,也就是我们可以在枚举位数上减少一定复杂度 我们转移的时候枚举一个末尾,也就是 $dp[i][j][S] = dp[i][k 阅读全文
posted @ 2018-08-21 17:04 sigongzi 阅读(137) 评论(0) 推荐(0)
摘要:题解 感觉极其神奇的状压dp $dp[i][S]$表示答案为i,然后不可选的点集为S 我们每次往答案里加一个点,然后方案数是,设原来可以选的点数是y,新加入一个点后导致了除了新加的点之外x个点不能选,那么方案就是把x个数在y 1(由于空余位置的第一个要放我们选的那个点)个位置里任意排列,方案数是$A 阅读全文
posted @ 2018-06-23 15:52 sigongzi 阅读(176) 评论(0) 推荐(0)
摘要:题解 怎么NOI2015D1……全是一眼秒的sb题……然后我代码全都写跪一遍= = 要是NOI2015是IOI赛制我就可以AK啦(大雾) 代码能力直线下降,NOI2018滚粗预定了啊TAT 我是不是要去开码农题啊QAQ 我们发现大于$\sqrt{N}$的素数只会在每个数里出现至多1个,而小于$\sq 阅读全文
posted @ 2018-06-11 11:38 sigongzi 阅读(341) 评论(1) 推荐(0)
摘要:题解 我们发现没有限制的小方格可以随便填 然后考虑有限制的,我们把它切割成一个个小块(枚举相邻的横纵坐标),然后记录一下这个小块的最大值限制(也就是所有覆盖它的矩形最小的最大值) 记录一下每个小块的大小,和每个小块在哪些有限制的大矩形,且小块的最大值限制等于大矩形的最大值限制,用一个二进制数表示 然 阅读全文
posted @ 2018-06-07 15:10 sigongzi 阅读(300) 评论(0) 推荐(0)
摘要:题解 一道,神奇的题= = 我们考虑正难则反,我们求去掉这些边后有多少图不是强连通的 怎么求呢,不是强连通的图缩点后一定是一个DAG,并且这个DAG里面有两个点 我们想一下,如果我们把1当成入度为0的点,随便造出个图,可以是这个图吧 如果把2当成入度为0的点,随便造出个图,也可以是这个图吧 把1和2 阅读全文
posted @ 2018-05-28 16:41 sigongzi 阅读(235) 评论(0) 推荐(0)
摘要:题解 看了一眼觉得是求出图对图统计完美匹配的个数(可能之前做过这样模拟题弃疗了,一直心怀恐惧。。。 然后说是统计一下每种匹配出现的概率,也就是,当前左边点匹配状态为S,右边点匹配状态为T,每种匹配出现的概率的总和作为$f[S][T]$,我们需要的就是$f[2^{n} 1][2^{n} 1]$ 然而, 阅读全文
posted @ 2018-05-25 08:25 sigongzi 阅读(351) 评论(0) 推荐(0)