随笔分类 -  动态规划-状压dp

摘要:E. Grid 大意: 给定$n\cdot m$个点的图, 初始无边, $q$个操作, $(1,a,b)$表示第$a$列到第$b$列全连起来, $(2,a,b)$表示把第$a$行到第$b$行全连起来, 每次操作后输出连通块个数. 直接用$set$暴力模拟即可. 还有一种线段树做法, 设一共$a$行连 阅读全文
posted @ 2019-10-15 22:29 uid001
摘要:C. Distinct Substrings 大意: 给定串$s$, 字符集$m$, 对于每个字符$c$, 求$s$末尾添加字符$c$后本质不同子串增加多少. exkmp求出每个前缀与后缀匹配的最大长度, 统计一下贡献即可 #include <iostream> #include <sstream> 阅读全文
posted @ 2019-10-15 12:43 uid001
摘要:大意: 给定串$s$, 字符集为字母表前$m$个字符, 求一个$m$排列$pos$, 使得$\sum\limits_{i=2}^n|{pos}_{s_{i-1}}-{pos}_{s_{i}}|$最小. 状压$dp$, 费用提前计算一下, 预处理$cost_{i,j}$表示与字符$i$相连的状态为$j 阅读全文
posted @ 2019-10-09 22:46 uid001
摘要:设$ans=\sum\limits_{A \cap B=\varnothing} f(A)g(B) $ 直接暴力枚举子集是$O(3^n)$, 一个技巧是先预处理出$h(S)=\sum\limits_{T\subseteq S}g(T)$ 然后$ans=\sum\limits_{S\subseteq 阅读全文
posted @ 2019-10-03 11:53 uid001
摘要:1208 F 大意: 给定序列$a$, 求$\text{$a_i$|$a_j$&$a_k$}(i<j<k)$的最大值 枚举$i$, 从高位到低位贪心, 那么问题就转化为给定$x$, 求判断$[i+1,n]$内二进制包含$x$的个数是否不少于$2$, 可以对每个状态, 维护最远的两个位置即可. 120 阅读全文
posted @ 2019-08-26 12:31 uid001
摘要:377A Maze 大意: 给定棋盘, 保证初始所有白格连通, 求将$k$个白格变为黑格, 使得白格仍然连通. $dfs$回溯时删除即可. #include <iostream> #include <functional> #include <sstream> #include <algorithm 阅读全文
posted @ 2019-08-04 21:01 uid001
摘要:珂...珂...珂朵莉给你出了一道送分题: 给你一个长为n的序列{vi},和一个数a,你可以从里面选出最多m个数 一个合法的选择的分数定义为选中的这些数的和加上额外规则的加分: 有b个额外的规则,第i个规则即为: 对于这个序列的所有长为a的连续子区间,如果这个子区间中对应的给出的xi个位置都被选中了 阅读全文
posted @ 2019-06-18 17:30 uid001
摘要:题目等价于给定无向图, 求一棵有根生成树, 假设树的根为$rt$, 对于树上的边$(u,v,w)$, 花费为$dep[v]*w$, 使得总花费最小. 设$dp[S][d]$为当前集合为$S$, 树的深度为$d$时的最小花费. 有$dp[S][d]=min\{dp[S'][d-1]+cost[S'][ 阅读全文
posted @ 2019-06-17 18:05 uid001
摘要:大意: 给定数组$R$, 求有多少个数组$A$, 满足$0\le A_i \le R_i$且$A_0+...+A_{N-1}=A_0\space or ...\space or \space A_{N-1}$. 题目条件等价于对于任意的$i,j$, 有$A_i and A_j = 0$, 所以每个二 阅读全文
posted @ 2019-06-16 22:11 uid001
摘要:大意: 给定$n$, 求集合{1,2,...n}的子集数, 满足若$x$在子集内, 则$2x,3x$不在子集内. 记$f(x)$为$x$除去所有因子2,3后的数, 那么对于所有$f$值相同的数可以划分为一个等价类, 对2的倍数和3的倍数建一个二维的表, 在表上做状压$dp$即可. 最后答案就为每个等 阅读全文
posted @ 2019-06-05 21:28 uid001
摘要:#include #include #include #include #include #include #include #include #include #define REP(i,a,n) for(int i=a;i=a;--i) #define hr putchar(10) #define pb push_back #define lc (o>1) #define ... 阅读全文
posted @ 2019-04-23 09:05 uid001
摘要:大意: n个点, $i$和$j$之间可以连$c_{ij}$种无向边, 求连成连通图的方案数. 设$f_i$为状态$i$时连通图方案, $g_i$为状态$i$时所有方案. 有$f[i]=g[i]-\sum\limits_{j}f[j]g[i\wedge j]$, j为包含i的最低位的所有i的子集 阅读全文
posted @ 2019-04-15 15:49 uid001
摘要:大意: n个红黑卡, 每天可以选择领取一块红币一块黑币, 或者买一张卡, 第$i$张卡的花费红币数$max(r_i-A,0)$, 花费黑币数$max(b_i-B,0)$, A为当前红卡数, B为当前黑卡数, 求买完所有卡最少天数. 这题挺巧妙的, 刚开始看花费的范围太大一直在想怎么贪心... 实际上 阅读全文
posted @ 2019-03-29 20:26 uid001
摘要:大意: 给定序列, 求选出一个最长的子序列, 使得任选两个[1,8]的数字, 在子序列中的出现次数差不超过1, 且子序列中相同数字连续. 正解是状压dp, 先二分转为判断[1,8]出现次数>=x是否成立, 再dp求出前i位匹配状态S长度为x+1的数字个数的最大值, 特判一下最低次数为0的情况. 这题 阅读全文
posted @ 2019-03-29 19:27 uid001