
状压dp
z听歌的小孩z
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #585 (Div. 2) E. Marbles (状压dp)
题目链接 题意:给你一个长度为n的序列,其中最多有20种颜色(用数字表示)。每次可以交换相邻两个元素,求最少的交换次数,使得相同数字的元素都合并在一起。 题解:赛后学了一波贪心AC的题解,没想到加强了数据wa了。于是转学状压dp。 首先进行预处理。设cnt[ i ][ j ],表示第 i 种颜色全部放到第 j 种颜色前面所需的操作次数。 从前开始枚举,设当前位置颜色为x ,那么cnt[ x...原创 2019-09-16 20:52:26 · 313 阅读 · 0 评论 -
G1. Playlist for Polycarp (easy version)(状压dp)
题目链接 类似的题状压dp 这两道题都是一样的套路,通过状压dp将 n!优化到 2^n,相信你写了上面那题,这题就很容易切掉了 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int mix = (1<<15), N = 300, mod = 1e9 + 7; ll...原创 2019-09-17 08:04:30 · 314 阅读 · 0 评论 -
P2622 关灯问题II(状压dp)
题目链接 题解:这题跑一下bfs就好了,用一个数x表示此时n盏灯的状态,二进制为 1 表示灯开。所以最后只要判断x为0,所有灯就关了。 #include<bits/stdc++.h> using namespace std; const int M = (1 << 11); struct node{ int pre, step; }; int mp[110][11...原创 2019-09-17 19:02:25 · 168 阅读 · 0 评论 -
P2704 [NOI2001]炮兵阵地(状压dp)
题目链接 题解:这题其实会状压dp就很简单了,只是限制条件有点多。 先预处理出一行的每一个合法的状态,这个基本操作,左移一位,两位,右移一位,两位,判断一下就好了。 设dp[i][j][k],意思是在第i行,第i行的状态为j,第i- 1行状态为k能放的最多炮阵。 然后转移要三层循环,比如dp[i][j][k] 能被 dp[i - 1][k][z] 转移的条件是,i不能打到j,以及i不能...原创 2019-09-19 18:53:58 · 176 阅读 · 0 评论 -
vijos 1456 最小总代价(状压dp)
题目链接 题解:这题就是普通的状压dp 设 二维dp[i][j] 表示为 在i状态下 物品在第j个人手上的最小代价花费。 初始化要注意一下。 #include<bits/stdc++.h> using namespace std; const int N = 20, M = (1 << 17); int dp[M][N], mp[N][N]; int main() ...原创 2019-09-20 19:48:30 · 220 阅读 · 0 评论 -
A1951 AC Challenge(状压dp)
题目链接 题意:有n个题目,每分钟可以做一个题目,做一些特点题目之前要把规定的题目做了才能做,每个题目能做的贡献是 T * a + b T是做这个题目的时间。 题解:这题转移简单,就是预处理有些麻烦。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = (1 <...原创 2019-09-20 19:59:28 · 153 阅读 · 0 评论 -
2018 蓝桥杯省赛 A 组模拟赛(一) F. 结果填空:铺瓷砖(状压dp + dfs)
题目链接 题解:设dp[i][j] 表示 第 i 行 为 j 状态的方案数,这个j状态是受上一行摆放情况的影响而来的。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int M = (1 << 11), N = (1 << 10); ll dp[12][M]...原创 2019-09-20 21:10:32 · 370 阅读 · 0 评论 -
Codeforces Round #590 (Div. 3) F. Yet Another Substring Reverse(状压dp)
题目链接 这题真没想到状压dp可以写,看了别人代码才看会的。 题意:给你一个只包含前20个英文字母的串。你可以执行一次操作,将这个串的任意子串翻转一次。让你求一个最长的没有重复字母的字串。 题解:首先看到只有二十个英文字母,无脑上状压dp。可以将这个串的任意子串翻转一次,实际上就是可以让两个去重的子字符串合并在一起。那么这个题就变成了枚举子集,表示我们必须选取这一段,然后为了使答案最优,所以...原创 2019-10-03 10:04:52 · 223 阅读 · 0 评论