首页 > TAG信息列表 > 状压

Mondriaan's Dream(状压dp)

Mondriaan's Dream(状压dp) 题目大意:用1x2的方块填满NxM的大矩形,问填满的方法有多少种。解题思路:利用先填好竖着的方块,剩下的空格再用横着的来填,且要求填好竖着的方块时,每一行都要能用横着的方块填满(即连续的空出来的位置必须是偶数,即合法) AC代码 #include <cstdio> #include <cst

线段树上状压(位运算)

洛谷P1558 分析: 颜色类型只有 \(30\) 种,可以利用二进制进行状压。 线段树维护一个二进制数表示区间的颜色为哪一种,将这个区间的颜色进行状压,每一种颜色对应二进制数的某一位。合并区间时将两个子节点的数按位或即可,题目区间修改为直接覆盖,统计答案时只需统计对应区间的数有多少个

Arrange the Bulls(状压dp)

Arrange the Bulls(状压dp) 题目大意:一些牛喜欢一些地方(每头牛都有一些喜欢的地方),现在要把这些地方分配给牛,每头牛都应该分到一个地方,问有多少种分配的方法 此题拥有着状压dp的鲜明特征,N和M只有20(看见这种数据的时候往状压dp上想一想),枚举每一种状态,判断合理性。像这种两种东西匹配

状态压缩 DP 学习笔记【入门篇】

前言 状态压缩 DP,简称状压 DP。 之前一直觉得状压特别难,学了一下,发现基本形态挺简单的。 在学习之前,你需要掌握: 简单 DP(如线性 DP,背包) 基本二进制运算:& 运算、| 运算、\(\oplus\) 运算、左右移运算符。 什么是状压 DP 状态压缩,顾名思义,就是对当前的状态压缩。 怎么压缩呢?答案是

状压DP-1755. 最接近目标值的子序列和

问题描述 给你一个整数数组 nums 和一个目标值 goal 。 你需要从 nums 中选出一个子序列,使子序列元素总和最接近 goal 。也就是说,如果子序列元素和为 sum ,你需要 最小化绝对差 abs(sum - goal) 。 返回 abs(sum - goal) 可能的 最小值 。 注意,数组的子序列是通过移除原始数组中的

状压DP-1815. 得到新鲜甜甜圈的最多组数

问题描述 有一个甜甜圈商店,每批次都烤 batchSize 个甜甜圈。这个店铺有个规则,就是在烤一批新的甜甜圈时,之前 所有 甜甜圈都必须已经全部销售完毕。给你一个整数 batchSize 和一个整数数组 groups ,数组中的每个整数都代表一批前来购买甜甜圈的顾客,其中 groups[i] 表示这一批

SP1700题解

题目大意: 给你一些车票和一些城市,问你从 \(a\) 走到 \(b\) 怎么走才能使总花费时间最小,并且没有限制城市的先后顺序。 题目分析: 这里看到题目后,因为数据范围 \(1 \leqslant n \leqslant 8\) ,很容易就想到能用状压DP做,只不过这是在图上做DP。 但这里需要考虑一个很重要的问题,是对车

CF1463F Max Correct Set

题意 现求一个集合 \(S\subseteq\{1,2,\cdots,n\}\),要求满足任意两个在此集合内的数 \(a,b\),它们的差 \(|a-b|\not ={x}\) 并且 \(|a-b|\not ={y}\)。求集合 \(S\) 的最大大小。 Solution 感觉 \(n\) 很大,\(x,y\) 很小,总感觉就是状压。 界外,首先可以想到暴力的状压,就是你考虑当前

1018 Mondriaan's Dream 状压DP-地图型变式

 链接:https://ac.nowcoder.com/acm/contest/25022/1018来源:牛客网 题目描述 Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he had to use

1020 德玛西亚万岁 状压DP

 链接:https://ac.nowcoder.com/acm/contest/25022/1020来源:牛客网 题目描述 德玛西亚是一个实力雄厚、奉公守法的国家,有着功勋卓著的光荣军史。 这里非常重视正义、荣耀、职责的意识形态,这里的人民为此感到强烈自豪。 有一天他们想去制裁邪恶的

1016 炮兵阵地 状压DP

链接:https://ac.nowcoder.com/acm/contest/25022/1016来源:牛客网 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可

题解 P4163 [SCOI2007]排列

强烈谴责只有 125MB 的行为,然后我没删调试是个什么 SB。。。 闲话少说,切入正题—— 首先看到取余和数字是可以排列的,我们自然而然的想到了数位 dp,但是很显然这题不是的数位 dp 通常解决的是 \(1\sim k\) 之间符合要求的数这里是恰好符合的。 发现 \(s\) 长度很小,只有 \(15\),所以

【题解】Luogu P4962 朋也与光玉

题目传送门! 其实是有点玄学在的 状压 \(DP\) 题意: 每个点一个颜色,找到一条最短的点数为 \(k\) 、恰好经过全部 \(k\) 种颜色的路径。你需要求出这条路径的长度。(\(k <= 13\)) 思路: 看数据范围,妥妥的状压。考虑怎么定义状态。 首先,“点数为 \(k\) 、恰好经过全部 \(k\) 种颜色”

状压dp

题目链接: https://www.luogu.com.cn/problem/P1896 题意: 在 \(n * n\) 的棋盘里面放 \(k\) 个国王,使他们互不攻击,共有多少种摆放方案。 国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 #include <bits/stdc++.h> using namespace std; #define

洛谷 P4510 - [CTSC2015]性别改造计划(网络流+状压 dp)

洛谷题面传送门 一道很烦的网络流题,代码每一块的结构都很清晰,但是拼起来就让人觉得很烦…… 首先此题的一大难点在于读题,我一开始傻傻地以为散点没有用,心想这题不是 sb 状压 dp 吗,后来才发现是自己都错题了……事实上本题正确的题意如下: 对于血缘链上的点,任何一条链上的第 \(j\)

POJ3254 Corn Fields(状压DP)

dp[i][j]表示第i行第j个状态时,前i行得到的方案数,该状态可由前一行的状态转移过来。 本题重点在于合法性检测:每一行都用一个二进制数表示,1.二进制数不能有相邻的1;2.要和原地图匹配;3.上下两行不能有冲突。 预处理地图时将0换成1,方便进行2号检测,用位运算&可以实现。 1 #include<cst

HDU3001 Travelling (状压DP)

题目没有起点限制,且每个节点至少访问1次,最多访问2次,所以用三进制数表示节点的状态(选取情况)。 因为三进制数的每一位是0或1或2,所以预处理z状态S的第j位的数是有必要的。 边界条件:dp[tri[i]][i]=0,表示只访问了i节点时,从i出发最小费用是0。 最后的答案就在所有满足条件的状态中统计d

POJ3311 Hie with the Pie(状压DP,Tsp)

本题是经典的Tsp问题的变形,Tsp问题就是要求从起点出发经过每个节点一次再回到起点的距离最小值,本题的区别就是可以经过一个节点不止一次,那么先预处理出任意两点之间的最短距离就行了,因为再多走只会浪费更多的距离。 dp[S][u]表示当前已访问的节点集合为S,从u出发走完剩余节点回到

一类图论相关的状压 DP 题

\(\newcommand\set[1]{\{#1\}}\) ​ 在这里我们要讨论的是和图的连通性、强连通性、双连通性相关的一类状压 dp。 ​ 本文不涉及集合幂级数 \(\exp\) / \(\ln\),因为我不会! ​ 这是两道例题: [GYM 102759C] Economic One-way Roads (最小生成强连通子图) 题意:给定一张无向图和将其上

CF1313D Happy New Year(扫描线+状压DP)

CF1313D Happy New Year(扫描线+状压DP) 题意 有 \(n\) 个咒语,\(m\) 个小朋友,每个咒语可以使得编号为 \([L,R]\) 区间内的小朋友收到一棵糖果,可以保证每个小朋友最多收到 \(k\) 颗糖果。其中 \(k < 9\) 现在可以从 \(n\) 个咒语种选择任意数量的咒语,尽可能多的使得小朋友收到的糖果

【完全背包问题】AcWing3.完全背包问题——朴素、优化、状压、思维转换

AcWing3.完全背包问题 题解 朴素写法 #include <iostream> using namespace std; const int N = 1010; int v[N], w[N]; int f[N][N]; int main() { int n, m; cin >> n >> m; for(int i = 1; i <= n; ++i) cin >> v[i] >> w[

关于状压DP枚举子集的方法与理解

我们现在要枚举状压集合 \(S\) 的子集,代码实现: for (int S1=S;S1!=0;S1=(S1-1)&S) { S2=S^S1; } 其中 \(S_1\) 就是我们枚举得到的子集,\(S_2\) 是当前子集 \(S_1\) 在 \(S\) 内的补集,即 \(S_1 \bigoplus S_2 = S\) \[{\because S_2 = S \bigoplus S_1} \]\[{\therefore S_2 \b

状压 2

状压 状态压缩,就是用一个整数代替DP中某种一般情况下需要以一维数组充当状态的状态 状压意义下的状态表示就是在\(P\)进制下将第\(i\)个元素的某种状态用整数第\(i\)位的\(j∈[0,P-1]\)表示出来 不同状态之间的转移需要用相应的位运算实现 一般的处理步骤? 预处理 首先预处理出各种

NOI 2001 炮兵阵地

原题链接: loj #10173 思路 注意到 \(1 \leq n \leq 100, 1 \leq m \leq 10\) ,并且对于每个格子都有放和不放两种选择, 所以断言是状压dp. 而状压dp需要一点位运算知识, 详见 状压dp常用位运算 状态 首先显然第一维是行数( \(n\) 很小, 所以不需要滚动数组). 再根据这一行被上两

C. 连锁商店(状压dp)

C. 连锁商店 time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output 比特山是一个旅游胜地,它一共有 n个景点,按照海拔高度从低到高依次编号为 1到 n。为了更好地帮助游客们欣赏这里的风景,人们在上面搭建了 m