![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
状态压缩
Zolrk
这个作者很懒,什么都没留下…
展开
-
Noip2016 愤怒的小鸟 【状压DP】
考虑到n的最多只有18个,可以用二进制来表示状态:f(s)表示消灭s集合的小猪所需要的最小小鸟数量,用0为第i个只猪没有被消灭,1为第i只小猪被消灭了,就像010001010101这样的,最后求的就是111111111111111这样状态的值状态转移方程为 f(S|P[i])=min(f(S|P[i]),f(S)+1)f(S|P[i])=min(f(S|P[i]),f(S)+1)通过枚举原创 2017-09-23 08:11:45 · 321 阅读 · 0 评论 -
洛谷P2915 Usaco08 Mixed Up Cows - 状态压缩
标准的状压题!所谓状态压缩就是将状态用二进制存储下来,并用位运算实现转移 用二进制存储,可以不重不漏地遍历到所有的状态我们设0表示牛已在队伍中,1表示牛不在队伍中,最后需要求得全部为1的状态 设状态为f(i,j)表示第i头牛在队尾,队伍状态为j(一个二进制数)时的方案数答案为∑n1f(i,(1111...1)2)\sum_{1}^{n} f(i,(1111...1)_2),这里(1111...1原创 2017-10-26 16:25:07 · 291 阅读 · 0 评论 -
NOI2001 炮兵阵地 - 状压DP
状压DP往往有套路,问题划分为阶段,并且阶段不是“一个”,而是“一群”,在上一个阶段到下一个阶段时,会增加一堆数据而不是一个,然后这一堆数据可以压缩成一个二进制,表示哪些有哪些没有 阶段的划分要“整齐”,比如这题是一行一行来的,维度的设计要考虑影响关系,因此设f[i][j][k]表示阶段进行到第i行(前i行)最后一行状态为k,最后一行的上一行状态为j的最优解 另一个套路就是预处理,几乎状态题都...原创 2018-05-12 10:50:40 · 328 阅读 · 0 评论 -
SCOI2005 互不侵犯 - 状压DP
考虑如何划分阶段,如何确定决策及转移 阶段就是子问题的规模,对于这道题,可以说“更小的棋盘,更少的king”算是子问题,但是我们难以表示“更小的棋盘”,难道要表示出行列吗? 我们可以灵活变换状态,更小的棋盘,并不代表我非要按相似比缩小棋盘,如果仅仅是“更小”,只要满足更小的要求,完全可以设计一个小的更加特殊的状态:按行来划分阶段,棋盘宽不变,小的仅仅是行,这样也满足“更小”的约定。虽然我没...原创 2018-08-08 10:35:56 · 251 阅读 · 0 评论 -
P2051 中国象棋 - DP - 包含了一些dp时常见的小错误
可以三进制状压,写个进制转换函数,可以存在整数型数组里,然后预处理一下,跟二进制没啥差别。。。 但是难写,数据范围也不够一个化繁为简的思维方式我们不需要知道棋盘具体的状态,准确来说,对于“同构”的棋盘状态(虽然同构不是这个意思,但是我找不到别的形容词了。。。),可以用一个棋盘状态去代替,只要这个状态所对应的值是所有“同构”的方案之和,就可以等效替代比如说目前有三种棋盘状态,但是可以忽...原创 2018-09-16 13:26:19 · 185 阅读 · 0 评论 -
P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper - 状压
似乎状压也可以有阶段?看做广义的线性dp,这道题是以“组数”为阶段,对比互不侵犯,那题是以行为阶段。 这类题有个特点,每个阶段不是一个单纯的数,而是一行,一列,一个待填充的东西 而我们状压,一次填充一个阶段(在同一个阶段中有多个元素进行了转移),再进行下一个阶段,就又成了“线性问题”阶段应该是最外层循环这题可以看出来阶段是电梯数(想象最优解方案是先坐满一个电梯,剩下的再坐别的电梯),电...原创 2018-09-14 17:34:42 · 206 阅读 · 0 评论