摘要:思路是枚举第一个字符串中所有长度大于三的字串,再用KMP在其他串中验证是否存在这个字串,取最长字母序最小者代码: 1 #include 2 #include 3 using namespace std; 4 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 16 #define repA(p,q,i) for( int (i)=(p); (i)!=(q); ++(i) ) 17 #def...
阅读全文
摘要:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html这篇博客形象地描述了KMP算法的原理接下来代码实现的问题这篇讲得非常详细http://billhoo.blog.51cto.com/2337751/411486下面KMP代码其中char t[]是文本,char p[]是模式串,int pi[]是辅助数组 1 // 判断t中是否含有p 2 bool KMP(char *p, char *t) 3 { 4 getPI(p); 5 int n = strl...
阅读全文
摘要:第一次做二维DP,1A思路是状态压缩+枚举,压缩的方法是将第p至第q行的元素加和,然后求最大子序列和,就能得出这一情况下的最大子矩阵然后用两层循环按行去枚举矩形,就能得出结果了。求最大子序列和的时候要注意,子序列和并非一定>=0上代码 1 #include 2 #include 3 #include 4 using namespace std; 5 6 #include 7 #include 8 9 #define range 11010 int a[range][range];11 int b[range];12 13 int main()14 {15 int n;16 ...
阅读全文
摘要:先发两道水题,完全是凭着N多个月前积攒的经验写的,还有校赛的那道DP,我觉得出的蛮好~HDU 1231最大子序列和,需要标记子序列开始和结束的位置 1 #include 2 #include 3 #include 4 using namespace std; 5 6 #include 7 #include 8 9 #define range 1001010 11 int a[range];12 13 int main()14 {15 int k;16 while(scanf("%d", &k) != EOF && k!=0)17 {18 int f.
阅读全文