状压DP
文章平均质量分 90
阿_波_
这个作者很懒,什么都没留下…
展开
-
状压DP_POJ 3001(三进制状态压缩)
题目意思很明显,但是和平时的TSP问题有一点点区别,平时的TSP问题,每个点只可以走一次,然后回到我们的起点,但是这个是每个点至多走两次,并且起点是任意的,问题是最短的距离是多少?这里参考了其他的博客,得知用到了三进制,因为每个点最多可以走两次,所以每个点的状态可以包含0、1、2三种,那么这里位运算就不可以使用了,我们就在程序的开始进行了打表预,处理将每个数的三进制中第i为上的数字都保存在数组di...原创 2018-05-01 12:57:09 · 252 阅读 · 0 评论 -
AC自动机+状压DP HDU 4057
题目意思有n个字符串,每个字符串都有对应的权值,那么我们要组建一个长度为m的字符串,并且要是这个字符串的权值最大,如果最大权值小于零,输出"No Rabbit after 2012!",否则输出最大的权值解决思路这里我们选择相应的字符串,要在Trie树上选择,并且我们还要进行模式串的匹配(匹配最大的数值),那么我们就一定会用到AC自动机,并且我们这里要确定一定长度的字符串使得权值最大,那么我们就会...原创 2018-05-01 18:18:56 · 194 阅读 · 0 评论 -
状压DP _ POJ 3311
有个人从0出发,然后需要经过所有的点,最终回到起点,问最少需要走的距离为多少,这类问题就被称为旅行商问题当我们的点数不超过16的时候,我们可以使用记忆化搜索+状态压缩的方式来对这类问题进行求解。首先他们给出的两点之间的距离不一定是最短的距离,并且我们这里的点都不会超多16,那么我们就可以使用O(n^3)的Floyd来求解各个点之间的最短路。然后已经访问过的节点S,并且当前所在的顶点为v,那么dp[...原创 2018-04-24 19:36:59 · 136 阅读 · 0 评论 -
状压DP_ POJ 1185
状压DP中我觉得重要的不是状态压缩,因为状压DP中的状态压缩思路很固定,重点还是在状态之间的转移!并且在状态压缩中的位运算也很重要,也就是如何处理状态之间的关系(如何用位运算计算出来)例如:给你的是01序列,0表示不能取,1表示可取,并且我们要给出的答案中在给的序列取0的位置不能取1,我们要怎么表示这个情况呢?如果我们选择和上面相同的储存方法是不能很好的判断这个关系的,我们可以将0储存为1,1储存...原创 2018-04-24 16:52:58 · 119 阅读 · 0 评论 -
状压DP实现顺序枚举 _ POJ 2817
题目链接POJ 2817题目意思有n个字符串,可以以任何一种顺序排列,每相邻两个字符串之间的最长公共子串长度为这两个之间的分数,在每个字符串的前面可以添加任意数量的空格,那么请问最大得到分数是多少?题目解析首先我们看到一个关键字:相邻字符串之间最长公共子串,那么这里就避免不了求解这个东西,我们发现这里n的范围(1 <= n <= 10),并且字符串的长度也不会超过10,那么我们直接枚举...原创 2018-04-25 18:36:58 · 346 阅读 · 0 评论 -
状压DP_ POJ 2411
解释开始看不出这是一个状压DP的问题,但是看到其他博客中每种摆放的状态表示的时候,终于想通了这个问题的解法:状态表示:横着放置:全部为1,竖着放置:上面为0、下面为1那么我们就可以用二进制表示出所有的状态了,并且当前行的状态只和上一行状态相关,现在就找一下每种状态之间的限制:1、i-1行为0的相应位置,在i行中必须全部为 1 (因为为0的状态一定为竖着放置,那么他的下面必须为1)2、i-1行和i...原创 2018-05-03 21:02:19 · 113 阅读 · 0 评论