状态压缩
HT008_123
家人们点点关注叭
展开
-
[Rocky Mountain Regional Programming Contest 2019] Water Later
题目描述:给你一个字串,你每次可以选择一段连续的相同的字符删去,但是你以但选择了一种类型,你就必须把这个类型的所有区间段都删去,才可以考虑选下一种类型。问最少几步可以清空字串。题目分析:对于字符串中的种类其实是特别少的 那么我们可以枚举状态 1表示在这个状态里这种字符已经全部消去了对于状态i来说 我们可以枚举其中消去的字符j 然后从i状态去除j的状态转移过来 现在的问题就是对于去除了j的状态需要花几次去消出所有的j。我们可以预处理一个cnt[sta][i]数组表示的是在sta这个状态下去除所有的原创 2020-09-19 14:42:00 · 385 阅读 · 0 评论 -
[2019 ICPC Malaysia National] Military Class
题目描述:给出两列士兵 第一行的i可以与第二行的j ( |i-j|<=e ) 配对 其中有k对不能匹配 现在求有多少种完全匹配方案 对1e9+7取模题目分析:看到e<=4也就是说某一个人能跟他匹配的很少 那么就可以用状压来表示第i个第一行的数字可以与其匹配的数字的匹配状态 然后加个记忆化搜索就可以了题目链接:Gym - 102219F代码:#include <cstdio>#include <iostream>#include <cstring&g原创 2020-09-19 13:12:03 · 239 阅读 · 0 评论 -
[SDOI2009] 学校食堂Dining
题目描述:QAQ…题目分析:状压DP… 观察到一个人的忍耐程度很小,可以状压… f[i][j][k]表示[1 – i-1] 吃完了 i 之后 状态 j 中 为 1的人也吃饭了,且最后一个吃饭的人为 i+k 的最小代价 k可以为负数转移的时候枚举 j 如果j&1不为0,那么证明i这个人吃饭了 可以转移到 f[i+1][j>>1][k-1] 去 如果...原创 2018-05-10 10:49:16 · 218 阅读 · 0 评论 -
[SCOI2008] 奖励关
题目描述:QAQ…题目分析:设计DP状态 dp[i][S] 表示在第 1 轮到第 i−1i 轮内宝物是否取过的状态为 S ,第 i 轮到第 K 轮的最大期望得分,那么这样就可以通过逆推进行转移了。 如果当前状态S满足K的前置条件 那么 dp[i][s]+=max(dp[i+1][s],dp[i+1][s|(1<<(k-1))]+v[k]) 如果不满足 dp[i][s...原创 2018-04-25 08:23:56 · 217 阅读 · 0 评论 -
[SDOI 2009] Bill的挑战
题目描述:QAQ…题目分析:N<=15,肯定是状压啦… 设dp[i][s]为当前匹配到第i位,字符串集合为s的方案数 转移就枚举第i位的字符即可 纯纯的暴力转移是不行的,我们预处理一个g[i][j]表示第i位如果字符是j能够匹配的字符串集合题目链接:Luogu 2167 BZOJ 1879Ac 代码:#include <cstdio>...原创 2018-04-24 10:54:43 · 184 阅读 · 0 评论 -
[CQOI2018] 解锁屏幕
题目描述:解锁锁.题目分析:状压DP呀,预处理两个点链接需要的必经点,然后DP就好惹题目链接:BZOJ 5299 Luogu 4460Ac 代码:速度差距巨大… DP版:#include <cstdio>#include <iostream>#include <queue>const int mod=10000000...原创 2018-04-19 16:06:15 · 486 阅读 · 0 评论 -
[九省联考 2018] 一双木棋chess
题目描述:有一个 n∗m的方格, Alice 和 Bob 玩游戏。每次每人可以选择一个格子占领,前提是这个格子未被占领且它左上方的所有格子都已被占领。第 i行第 j 列的格子若被 Alice 占领则 Alice 获得 Ai,j 分,若被 Bob 占领则 Bob 获得 Bi,j分。Alice 先手,所有格子都被占领时结束。双方都想最大化自己的得分与对方得分的差。求双方采取最优策略时 Al...原创 2018-04-09 09:18:07 · 641 阅读 · 0 评论 -
售货员的难题
状压DP DP[S][i]在S状态下到i最后到i点的最小距离#include #include #include #define il inline#define idx(x) 1using namespace std;int dis[21][21],dp[(120)+10][21];il int qread(){ int x=0,w=1; char ch=原创 2018-01-20 21:01:01 · 276 阅读 · 0 评论 -
[NOI 2015]寿司晚餐
题目分析:对于一个数而言 我们选一个数就相当于选这个数的所有质因数 两个数只要没有相同的质因数即为互质 对于一个数N , N中大于n√\sqrt{n}的质因数至多只有一个 Nn√\sqrt{n} 只有 8 个 考虑状压:对于每个数 我们可以把它分为两部分 状态S表示 i 这个数分解质因数后小于n√\sqrt{n}的质因数二进制表示 r 表示 i 这个数在 去除了小于n√原创 2018-01-23 10:01:01 · 231 阅读 · 0 评论 -
NOIP2017 D2 T2 宝藏
做数据结构的题目有点恶心。 于是来做做NOIP没A掉的题目。 想起考场上写的状压来了,仔细想了想,猛地发现我的解法好像已经接近正解了。但是考场上放弃了状压,写了最小生成树~ 不知道官方的正解是个啥,不过 状压+记忆化搜索确实可以A掉此题 上面是一个二维DP! 下面是记忆化搜索! 遗憾。#include <cstdio>#include <iostream>#include <cs原创 2018-01-03 19:56:52 · 812 阅读 · 3 评论 -
三向城+香兰子
三向城 题目描述 三向城是一个巨大的城市,之所以叫这个名字,是因为城市中遍布着数不尽的三岔路口。(来自取名力为0的出题人) 具体来说,城中有无穷多个路口,每个路口有唯一的一个正整数标号。除了1号路口外,每个路口都连出正好3条道路通向另外3个路口:编号为x(x>1)的路口连出3条道路通向编号为x*2,x*2+1和x/2(向下取整)的3个路口。1号路口只连出两条道路,分别连向2号和3号路口。 所原创 2017-11-04 18:44:15 · 442 阅读 · 0 评论 -
单词游戏
QAQ 标签是记忆化搜索 我居然第一下想到的是状压DP? 先给出状压的解法 令DP[i][j]是状态i下最后一个单词是j是否可行 转移方程 dp[i][j|(1<< k-1)]=dp[i][j](前提是满足要求)#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define ll l原创 2017-11-09 15:07:41 · 729 阅读 · 0 评论 -
洛谷10月月赛R1·浴谷八连测R1·提高组 T3
传送门 这题真的费劲! 我们用二进制来表示场上的剩下的黑棋子有哪些。 由于黑骑士我们吃不掉,国王吃了就GG。 所以最多的状态是有2^13个。 用s来表示状态 mp[s][x][y]来表示s状态下x,y是否被攻击到了 vis[s][x][y]来表示s状态下x,y是否走过了。 把所有的mp[s][x][y]预处理出来(要不你吃了棋子再还原太麻烦了啊) 然后用BFS转移就行啦!#incl原创 2017-10-15 17:33:30 · 355 阅读 · 0 评论 -
愤怒的小鸟
QAQ 状压DP 1表示小鸟打掉了,0表示没打掉。 dp[s]表示到S状态最少需要几步。怎么枚举a,b。 因为c=0,只需两只猪即可确定一条曲线。 boom[i][j]表示i猪和j猪确定的曲线可以打掉的猪。关于转移 枚举状态s中第一只没有打掉的小猪,固定i,枚举j即可注意初始化#include <cstdio>#include <iostream>#include <cstring>原创 2017-10-22 10:10:40 · 394 阅读 · 0 评论 -
P4876 近似排列计数
不用看啦,蒟蒻博主没AC,只打了50分的代码! 1:全排列方法暴力判断#include <cstdio>#include <iostream>#include <cstring> using namespace std;const int mod=1e9+7;bool vis[21];int a[21],ans;void dfs(int x,int p,int k){ if原创 2017-10-05 16:34:55 · 318 阅读 · 0 评论 -
关押罪犯
QAQ 看下数据范围,n<=16.emmmm 这么小的范围,再看枚举的东西,应该是状压DP了 f[s]表示关押s个罪犯最少分几组 n^2暴力判断s状态下罪犯的冲突数 如果<=k,那这些罪犯就可以分为1组 如果不行,那就枚举s的子集和子集关于s的补集,去找最小的就行啦! 复杂度O(n^3)#include <cstdio>#include <iostream>#include <cs原创 2017-10-03 19:45:52 · 313 阅读 · 0 评论