09 2012 档案
摘要:http://codewaysky.sinaapp.com/problem.php?id=1056这题和奶牛浴场略有区别,奶牛浴场只需要求出最大子矩形,而这题要求的是最大权重子矩形,不一定要最大的面积,但要最大的权重和思路是先求出每个最大子矩形,然后求出每个矩形的左上点和右下点,然后用二维数转数组进行求和,保存最优解View Code 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<stdio.h> 5 #include<memory.h>
阅读全文
摘要:http://codewaysky.sinaapp.com/problem.php?id=1057提交这题的OJ比较少,可以在这里提交根据王知昆的论文里说的,解决这种问题通常有两种方法。这里我用的第二种方法。什么都不懂的,先看论文http://wenku.baidu.com/view/728cd5126edb6f1aff001fbb.html具体的没啥好说的,根据论文里说的实现以下就是了,详细注释看codeView Code 1 #include<iostream> 2 #include<string> 3 #include<stdio.h> 4 #incl
阅读全文
摘要:这题的意思是,给你n个长度不超过5的字符串,求有多少个长度为至少为L的字符串,里面至少包含n个字符串中的一个。这题和求DNA片段的差不多啦,只不过L的条件有点变化。假设矩阵A里储存着字符间的可行转移,那么A^L就代表了长度为L的不包含n个字符串中任何一个的个数。最终的答案就是26^1+26^2+......+26^L减去A^1+A^2+....+A^L矩阵A可以用ac自动机维护一个跳转表得到。接下来就是考虑如何快速的求得A^1+A^2+....+A^L了。根据矩阵的性质|A, 1| |A^n, 1+A^1+A^2+....+A^(n-1)||0, 1| 的n次方等于|0, 1|所以我们只需要将
阅读全文
摘要:感谢http://blog.henix.info/blog/poj-2778-aho-corasick-dp.html给的灵感看数据规模,很容易想到用矩阵求解,关键是如何得到原始矩阵。上面连接博客中的方法给力,在AC自动机上确定出每一个点的跳转点,即jump数组,表示该点可以跳转到的点。利用每个点的jump数组,我们就可以确定出一张跳转表,也即时我们需要的原始矩阵。对每个点,如果它不是病毒片段的结尾,那么它便是安全的。我们很容易可以理解,安全点到安全点之间的跳转,总是安全的。给每个安全点一个编号,构建一个矩阵a[][]。那么a[i][j]就表示从第j个安全点能够跳转到第i个安全点的数量。将这个
阅读全文
摘要:http://blog.henix.info/blog/trie-aho-corasick.html这个博客说的很清楚了。自己实现了个,留个模版View Code 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 using namespace std; 5 6 struct node 7 { 8 struct node *fail; 9 struct node *next[26]; 10 int cnt; 11 node() 12 { 13 ...
阅读全文