套路 其实套路挺明显的,也很容易看出来要用状压,所以通常就把一行的状态压缩成一个数(一般适用于放不放棋子这类的只有选/不选两种状态的) (有可能会有特殊情况,比如炮兵阵地就是三进制状压,这个我们先不管) 核心代码大概长这样,根据不同题的不同限制改一改就行了: void dp(){ f[0][0]=1 ...
转载
2021-05-25 23:41:00
314阅读
2评论
状态压缩 \(\operatorname{DP}\) 是将比较复杂的状态映射成数字后进行 \(\operatorname{DP}\) 。 难点:设计状态 基本位运算 枚举子集: for(int i=s;i;i=(i-1)&s) 例题: P4163 [SCOI2007]排列 \(dp[s][j]\) ...
转载
2021-07-27 18:40:00
137阅读
2评论
一、基本概念&算法基础: 顾名思义,就是把一些状态压缩成一个或多个n进制数来表示,然后通过数位的运算来判断这些数所对应的状态是否合法,从而成对状态的转移。 常用2进制,因此2进制位运算就很重要。 二、没了 注意合法性常常需要从多个方面考虑,不要漏掉需要考虑的情况。 例题:洛谷P1879 [USACO ...
转载
2021-08-24 16:43:00
133阅读
2评论
啃了几天状压dp终于觉得可以了,其实状压很简单的,关键是不好想状态转移,然后就是好几道例题,其中有一道是本人自己想的成就感满满的。 这道题是入门吧关键是学会一些位运算的操作思路很简单bfs宽搜即可,还有状态的携带,把状态压成数字进行搜索。 #include<bits/stdc++.h> #inclu
转载
2019-01-10 19:26:00
126阅读
//Poj 3254 Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20258 Accepted: 10633 Description Farmer John has purchased a lush n
转载
2018-09-01 21:33:00
89阅读
2评论
题目描述:在 L 的书架上,有 N 本精彩绝伦的书籍,每本书价值不菲。M 是一个书籍爱好者,他对 L 的书籍早就垂涎三尺。最后他忍受不了
原创
2022-07-05 10:04:33
104阅读
状态压缩·一 题目传送:#1044 : 状态压缩·一 AC代码: #include <map> #include <set> #include <list> #include <cmath> #include <deque> #include <queue> #include <stack> #in
转载
2017-07-03 21:58:00
116阅读
2评论
题目描述:小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播放。他希望
原创
2022-07-05 10:34:07
145阅读
#状压dp 将状态表示为一个或多个n进制数,通过数位的运算判断情况之间是否合法,从而完成状态的转移。 ###矩阵内状压dp一般模板 伪代码 将每一行的状态用一个二进制数表示 a{i}.s存储第i中合法情况的二进制数 f{i}{j}表示第i行状态为第j种状态时的答案(最大值or方案数) for(int ...
转载
2021-09-08 17:52:00
150阅读
2评论
看了一个多星期状压DP,总算有点明白,大概可以分为两种:数据是在矩阵中的,数据是线性的,在矩阵中的一般就是排兵布阵这一种的,还有一种线性结构中给定条件让你求最大权值,比如求最大权值路线,TSP问题等,前一种的状态比较好想,一般就是有了第一行的状态然后推下一行的状态,i行的状态一般由i-1行的状态推出
转载
2016-08-09 15:47:00
118阅读
2评论
CHEAP DELIVERIES(状压dp)题意 给定有权无向图,给定k(k≤18)k(k\le 18)k(k≤18)个任务,每个任务有起点和终点,求完成这kkk个任务的最小路径和。思路 看到kkk的范围显然是状压dpdpdp,因为起点和终点确定,所以最短路也是确定的,可以先跑最短路预处理距离,然后进行状压dpdpdp即可,令dp[st][i]dp[st][i]dp[st][i]表示当前状态ststst下位于end[i]end[i]end[i]这个位置的花费,对ststst没有的任务进行
原创
2022-01-21 10:38:37
60阅读
传送门f[i][j] 表示状态为i , 以j结尾的单词的最大长度#include<bits/stdc++.h>#define N 20#define
原创
2022-07-05 12:01:37
91阅读
http://poj.org/problem?id=1038#include<cstdio>#include<cstring>int const N=200;int const M=20;int map[N]
原创
2022-08-08 14:54:51
34阅读
CHEAP DELIVERIES(状压dp)题意 给定有权无向图,给定k(k≤18)k(k\le 18)k(k≤18)个任务,每个任务有起点和终点,求完成这kkk个任务的最小路径和。思路 看到kkk的范围显然是状压dpdpdp,因为起点和终点确定,所以最短路也是确定的,可以先跑最短路预处理距离,然后进行状压dpdpdp即可,令dp[st][i]dp[st][i]dp[st][i]表示当前状态ststst下位于end[i]end[i]end[i]这个位置的花费,对ststst没有的任务进行
原创
2021-08-10 09:34:47
66阅读
就是旅行商问题 给出一张无向图 要求从1号点开始遍历所有的点最后再回到一号点 总的距离最短 因为数据小 先跑一边floyd 显然想要算路径要求明确两个点 转移的目标点是明确的 但另一个点需要开一维dp来记录 #include<bits/stdc++.h> using namespace std; /
转载
2019-05-21 16:45:00
111阅读
2评论
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539思路:跟poj1185简直就是如出一辙! 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int row[111]; 8 int dp[111][222][222]; 9 int s[10){17 cnt++;18 x=x&(x-1);19 }20 return cnt;21 }22 23 int main()24 {25 while(~sca...
转载
2013-08-30 20:39:00
140阅读
2评论
这道题是腾讯马拉松的题,中文题,就不解释题意了。
状压DP,同炮兵阵地,写着练练手。
攻击范围是曼哈顿距离2,画个图能知道是这样的
x
x x
x o x
下半部分就不画了。其实就是裸题。
#include <set>
#include <map>
#include <stack>
#include <cma
转载
2013-08-20 20:13:00
193阅读
2评论
【状态压缩dp】棋盘覆盖Accept: 0 Submit: 0Time Limit: 1 second Memory Limit : 131072 KB Problem Description有一个N*M(1<=N<=5,1<=M<=1000)的棋盘,现在有1*2和2*1的小木块无数个,要想盖满整个棋盘,会有多少种可行的方法? 答案如果大于1,000...
原创
2021-08-25 14:11:06
346阅读
题意: 给出几个学科的作业、每个作业剩余的时间、完成每个学科作业的时间、如果在剩余时间内不能完成相应作业 就要扣分 延迟一天扣一分 求最小扣分 解析: 把这些作业进行全排列 求出最小扣分即可 但A(15,15) 情况这么多 自然要想到状态压缩 1表示已经做完 0表示还没有做 用dp存储最小扣分 pr
转载
2018-05-20 20:09:00
122阅读
2评论
#define _CRT_SECURE_NO_WARNINGS #include<bits/stdc++.h> #define ull unsigned long long using namespace std; const int INF = 0x3f3f3f3f,M=27*27*27-1; i ...
转载
2021-09-01 11:29:00
153阅读
2评论